Bài này sẽ hướng dẫn cách xem bất cứ phần nào ta muốn trong bảng (DataFrame) đã tạo.
Tạo bảng mới
In [1]: import pandas as pd
In [4]: import numpy as np
In [5]: dates = pd.date_range('20161212', periods=6)
In [6]: df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
In [7]: df
Out[7]:
A B C D
2016-12-12 -0.115304 -0.400382 1.254944 0.702264
2016-12-13 1.436155 0.476939 1.334369 0.223856
2016-12-14 -0.124606 -0.017318 0.824345 -0.432029
2016-12-15 -1.013802 0.266865 1.341752 -0.990876
2016-12-16 0.669347 -1.086764 0.555358 -0.579439
2016-12-17 -0.405407 -0.044016 -0.153047 -0.800809
Truy cập hàng và cột trong bảng
Lấy danh sách tên các cột (column)
In [60]: df.columns
Out[60]: Index(['A', 'B', 'C', 'D'], dtype='object')
Lấy danh sách tên các dòng (index)
In [61]: df.index
Out[61]:
DatetimeIndex(['2016-12-12', '2016-12-13', '2016-12-14', '2016-12-15',
'2016-12-16', '2016-12-17'],
dtype='datetime64[ns]', freq='D')
Lấy dữ liệu trong bảng
In [62]: df.values
Out[62]:
array([[-0.11530425, -0.40038169, 1.25494416, 0.70226436],
[ 1.43615505, 0.47693927, 1.33436851, 0.22385577],
[-0.12460608, -0.0173181 , 0.82434486, -0.4320285 ],
[-1.01380199, 0.26686462, 1.34175163, -0.99087559],
[ 0.66934672, -1.08676379, 0.55535794, -0.57943899],
[-0.40540728, -0.04401589, -0.15304738, -0.80080895]])
Lấy từng cột và từng hàng
pandas hỗ trợ truy cập theo 2 cách:- theo label (tên các index, tên cột): sử dụng loc và at
- theo số thứ tự (chỉ số bắt đầu từ 0): sử dụng iloc và iat
- các function này nhận các argument đầu vào lần lượt là hàng, cột.
Lấy một ô cụ thể
at (trong tiếng Việt nghĩa là : ở) - chỉ dùng để lấy 1 giá trị (1 ô trong bảng). Lấy ô đầu tiên trong bảng, sử dụng label. Tức ngày đầu tiên (hàng) và column A (cột):In [41]: df.at[dates[0], 'A']hoặc truy cập bằng vị trí (position): đây là ô đầu tiên, cột đầu tiên.
Out[41]: -0.11530424537901704
Chú ý:
Trên Python, thứ tự luôn đếm từ 0
In [42]: df.iat[0, 0]Giá trị nằm trong ô này là một số - hay gọi là đại lượng vô hướng (scalar).
Out[42]: -0.11530424537901704
Lấy toàn bộ các dòng trong cột
Dùng label của column lấy cột B, truy cập "attribute" B của object df :In [50]: df.BLấy dòng thứ 2 (chỉ số là 1) của cột B:
Out[50]:
2016-12-12 -0.400382
2016-12-13 0.476939
2016-12-14 -0.017318
2016-12-15 0.266865
2016-12-16 -1.086764
2016-12-17 -0.044016
Freq: D, Name: B, dtype: float64
In [65]: df.B[1]Hoặc truy cập theo cú pháp DataFrame['TÊN CỘT']:
Out[65]: 0.47693926863267544
In [68]: df['B']Ưu điểm của cách làm thứ 2 này là có thể truy cập các cột có tên là ký tự đặc biệt - không trong bảng chứ cái tiếng Anh. Nếu cột nào tên là "họ và tên", ta có thể truy cập bằng: df['họ và tên'].
Out[68]:
2016-12-12 -0.400382
2016-12-13 0.476939
2016-12-14 -0.017318
2016-12-15 0.266865
2016-12-16 -1.086764
2016-12-17 -0.044016
Freq: D, Name: B, dtype: float64
😘 Cám ơn HTL đã chỉ ra điều này.
Truy cập theo hàng và giới hạn kết quả theo cột
Lấy toàn bộ hàng thứ 2 theo label:In [51]: df.loc[dates[1]]Lấy toàn bộ hàng thứ 2 theo vị trí:
Out[51]:
A 1.436155
B 0.476939
C 1.334369
D 0.223856
Name: 2016-12-13 00:00:00, dtype: float64
In [52]: df.iloc[1]Lấy hàng 2 (chỉ số 1), cột 3 (chỉ số 2):
Out[52]:
A 1.436155
B 0.476939
C 1.334369
D 0.223856
Name: 2016-12-13 00:00:00, dtype: float64
In [53]: df.iloc[1, 2]hay lấy ô ứng với ngày 2016-12-13 cột C:
Out[53]: 1.3343685138882
In [54]: dates[1]Lấy hàng ứng với ngày đầu tiên (dòng 0), sau đó chỉ chọn cột A và B (cột 0, 1):
Out[54]: Timestamp('2016-12-13 00:00:00', freq='D')
In [55]: df.loc[dates[1], 'C']
Out[55]: 1.3343685138882
In [56]: df.loc[dates[0], ['A', 'B']]
Out[56]:
A -0.115304
B -0.400382
Name: 2016-12-12 00:00:00, dtype: float64
In [57]: df.iloc[0, [0, 1]]
Out[57]:
A -0.115304
B -0.400382
Name: 2016-12-12 00:00:00, dtype: float64
Hết.
Tham khảo: http://pandas.pydata.org/pandas-docs/stable/10min.html
HVN at http://www.familug.org/ and http://pymi.vn
No comments:
Post a Comment