Bài trước đã hướng dẫn các khái niệm cơ bản và cách tạo một bảng dữ liệu bằng pandas.
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.
- 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.
Chú ý:
😘 Cám ơn HTL đã chỉ ra điều này.
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
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
Comments
Post a Comment