本文重點知識:
- 建立帶有日期的索引:
dates = pd.date_range('20190924', periods=6)
- head()、tail()
- 按軸排序:索引排序
,預設是sort_index
升序ascending=True
- axis=0:行索引,可以用
index
- axis=1:列索引,可以用
columns
- axis=0:行索引,可以用
- 按值排序:
,預設升序df.sort_values(by='columns')
建立資料
import numpy as np
import pandas as pd
複制
s = pd.Series([1, 3, 5, np.nan, 6, 89])
s
複制
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 89.0
dtype: float64
複制
dates = pd.date_range('20190924', periods=6)
dates
複制
DatetimeIndex(['2019-09-24', '2019-09-25', '2019-09-26', '2019-09-27',
'2019-09-28', '2019-09-29'],
dtype='datetime64[ns]', freq='D')
複制
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list("ABCD"))
df
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-24 | 0.500005 | 0.166578 | -0.758513 | -0.679173 |
2019-09-25 | 0.090209 | 0.117906 | -0.402183 | 2.261182 |
2019-09-26 | -0.809052 | -0.173144 | 0.324912 | -1.885101 |
2019-09-27 | 0.310374 | -1.502089 | 1.524401 | 0.269953 |
2019-09-28 | -0.846488 | -0.235878 | 1.398896 | -0.229573 |
2019-09-29 | 0.975853 | -0.998395 | -0.514480 | -0.882704 |
# 同時建立多個不同的列
df2 = pd.DataFrame({'A': 1., # 某列的值相同
'B': pd.Timestamp('20130102'), # 時間戳的建立
'C': pd.Series(1, index=list(range(4)), dtype='float32'), # 某列值可以是S型資料
'D': np.array([3] * 4, dtype='int32'), # 使用numpy數組
'E': pd.Categorical(["test", "train", "test", "train"]), # 不同的類
'F': 'foo'}) # 使用布爾值
df2
複制
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1.0 | 2013-01-02 | 1.0 | 3 | test | foo | |
1 | 1.0 | 2013-01-02 | 1.0 | 3 | train | foo |
2 | 1.0 | 2013-01-02 | 1.0 | 3 | test | foo |
3 | 1.0 | 2013-01-02 | 1.0 | 3 | train | foo |
df2.dtypes
複制
A float64
B datetime64[ns]
C float32
D int32
E category
F object
dtype: object
複制
檢視資料
檢視資料的相關資訊
- 頭、尾幾行資料
- index、columns
- describe ,T
# 前幾行資料,預設是5行
df.head(3)
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-24 | 0.500005 | 0.166578 | -0.758513 | -0.679173 |
2019-09-25 | 0.090209 | 0.117906 | -0.402183 | 2.261182 |
2019-09-26 | -0.809052 | -0.173144 | 0.324912 | -1.885101 |
# 檢視末幾行,預設是5行
df.tail(2)
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-28 | -0.846488 | -0.235878 | 1.398896 | -0.229573 |
2019-09-29 | 0.975853 | -0.998395 | -0.514480 | -0.882704 |
# 檢視資料的行索引
df.index
複制
DatetimeIndex(['2019-09-24', '2019-09-25', '2019-09-26', '2019-09-27',
'2019-09-28', '2019-09-29'],
dtype='datetime64[ns]', freq='D')
複制
# 檢視資料的列屬性
df.columns
複制
Index(['A', 'B', 'C', 'D'], dtype='object')
複制
df.to_numpy()
複制
array([[ 0.50000505, 0.16657823, -0.75851253, -0.67917279],
[ 0.09020909, 0.11790626, -0.40218323, 2.26118249],
[-0.80905211, -0.17314443, 0.32491161, -1.88510066],
[ 0.31037417, -1.50208882, 1.52440064, 0.26995285],
[-0.8464884 , -0.23587797, 1.39889574, -0.22957318],
[ 0.9758533 , -0.99839501, -0.51448041, -0.88270375]])
複制
df.describe()
複制
A | B | C | D | |
---|---|---|---|---|
count | 6.000000 | 6.000000 | 6.000000 | 6.000000 |
mean | 0.036817 | -0.437504 | 0.262172 | -0.190903 |
std | 0.730717 | 0.668113 | 0.997562 | 1.400993 |
min | -0.846488 | -1.502089 | -0.758513 | -1.885101 |
25% | -0.584237 | -0.807766 | -0.486406 | -0.831821 |
50% | 0.200292 | -0.204511 | -0.038636 | -0.454373 |
75% | 0.452597 | 0.045144 | 1.130400 | 0.145071 |
max | 0.975853 | 0.166578 | 1.524401 | 2.261182 |
df.T
複制
2019-09-24 00:00:00 | 2019-09-25 00:00:00 | 2019-09-26 00:00:00 | 2019-09-27 00:00:00 | 2019-09-28 00:00:00 | 2019-09-29 00:00:00 | |
---|---|---|---|---|---|---|
A | 0.500005 | 0.090209 | -0.809052 | 0.310374 | -0.846488 | 0.975853 |
B | 0.166578 | 0.117906 | -0.173144 | -1.502089 | -0.235878 | -0.998395 |
C | -0.758513 | -0.402183 | 0.324912 | 1.524401 | 1.398896 | -0.514480 |
D | -0.679173 | 2.261182 | -1.885101 | 0.269953 | -0.229573 | -0.882704 |
# sort_index
# 索引排序`sort_index`,預設是`ascending=True`升序
# axis=0:行索引,可以用`index`
# axis=1:列索引,可以用`columns`
df.sort_index(axis=1)
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-24 | 0.500005 | 0.166578 | -0.758513 | -0.679173 |
2019-09-25 | 0.090209 | 0.117906 | -0.402183 | 2.261182 |
2019-09-26 | -0.809052 | -0.173144 | 0.324912 | -1.885101 |
2019-09-27 | 0.310374 | -1.502089 | 1.524401 | 0.269953 |
2019-09-28 | -0.846488 | -0.235878 | 1.398896 | -0.229573 |
2019-09-29 | 0.975853 | -0.998395 | -0.514480 | -0.882704 |
# 按照行索引進行降序
df.sort_index(axis=0, ascending=False)
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-29 | 0.975853 | -0.998395 | -0.514480 | -0.882704 |
2019-09-28 | -0.846488 | -0.235878 | 1.398896 | -0.229573 |
2019-09-27 | 0.310374 | -1.502089 | 1.524401 | 0.269953 |
2019-09-26 | -0.809052 | -0.173144 | 0.324912 | -1.885101 |
2019-09-25 | 0.090209 | 0.117906 | -0.402183 | 2.261182 |
2019-09-24 | 0.500005 | 0.166578 | -0.758513 | -0.679173 |
# 按照某個屬性進行排序
# 按照B屬性的升序排列
df.sort_values(by="B")
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-27 | 0.310374 | -1.502089 | 1.524401 | 0.269953 |
2019-09-29 | 0.975853 | -0.998395 | -0.514480 | -0.882704 |
2019-09-28 | -0.846488 | -0.235878 | 1.398896 | -0.229573 |
2019-09-26 | -0.809052 | -0.173144 | 0.324912 | -1.885101 |
2019-09-25 | 0.090209 | 0.117906 | -0.402183 | 2.261182 |
2019-09-24 | 0.500005 | 0.166578 | -0.758513 | -0.679173 |
df.sort_values(by=["B","C"])
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-27 | 0.310374 | -1.502089 | 1.524401 | 0.269953 |
2019-09-29 | 0.975853 | -0.998395 | -0.514480 | -0.882704 |
2019-09-28 | -0.846488 | -0.235878 | 1.398896 | -0.229573 |
2019-09-26 | -0.809052 | -0.173144 | 0.324912 | -1.885101 |
2019-09-25 | 0.090209 | 0.117906 | -0.402183 | 2.261182 |
2019-09-24 | 0.500005 | 0.166578 | -0.758513 | -0.679173 |
選擇資料
檢視指定的行列資料
# 指定列屬性檢視資料
df[["B","C"]]
複制
B | C | |
---|---|---|
2019-09-24 | 0.166578 | -0.758513 |
2019-09-25 | 0.117906 | -0.402183 |
2019-09-26 | -0.173144 | 0.324912 |
2019-09-27 | -1.502089 | 1.524401 |
2019-09-28 | -0.235878 | 1.398896 |
2019-09-29 | -0.998395 | -0.514480 |
# 指定行标簽檢視指定的行資料
df[1:3]
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-25 | 0.090209 | 0.117906 | -0.402183 | 2.261182 |
2019-09-26 | -0.809052 | -0.173144 | 0.324912 | -1.885101 |
df["20190924":"20190927"]
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-24 | 0.500005 | 0.166578 | -0.758513 | -0.679173 |
2019-09-25 | 0.090209 | 0.117906 | -0.402183 | 2.261182 |
2019-09-26 | -0.809052 | -0.173144 | 0.324912 | -1.885101 |
2019-09-27 | 0.310374 | -1.502089 | 1.524401 | 0.269953 |
loc
根據标簽(不是自帶的數字索引)檢視資料
df.loc[dates[0]]
複制
A 0.500005
B 0.166578
C -0.758513
D -0.679173
Name: 2019-09-24 00:00:00, dtype: float64
複制
dates[0]
複制
Timestamp('2019-09-24 00:00:00', freq='D')
複制
# 選擇行和列
df.loc[:, ["A","B"]] # 選擇所有行和AB兩個列
複制
A | B | |
---|---|---|
2019-09-24 | 0.500005 | 0.166578 |
2019-09-25 | 0.090209 | 0.117906 |
2019-09-26 | -0.809052 | -0.173144 |
2019-09-27 | 0.310374 | -1.502089 |
2019-09-28 | -0.846488 | -0.235878 |
2019-09-29 | 0.975853 | -0.998395 |
# 索引通過标簽來實作
df.loc['20190924':'20190927', ['A', 'B']]
複制
A | B | |
---|---|---|
2019-09-24 | 0.500005 | 0.166578 |
2019-09-25 | 0.090209 | 0.117906 |
2019-09-26 | -0.809052 | -0.173144 |
2019-09-27 | 0.310374 | -1.502089 |
# 指定的行或者列可以是切片形式
df.loc['20190924':'20190927', 'A':'B']
複制
A | B | |
---|---|---|
2019-09-24 | 0.500005 | 0.166578 |
2019-09-25 | 0.090209 | 0.117906 |
2019-09-26 | -0.809052 | -0.173144 |
2019-09-27 | 0.310374 | -1.502089 |
iloc數字索引
記憶放法:
iloc
記為
intloc
,int為整型,表示通過數字來進行索引
df
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-24 | 0.500005 | 0.166578 | -0.758513 | -0.679173 |
2019-09-25 | 0.090209 | 0.117906 | -0.402183 | 2.261182 |
2019-09-26 | -0.809052 | -0.173144 | 0.324912 | -1.885101 |
2019-09-27 | 0.310374 | -1.502089 | 1.524401 | 0.269953 |
2019-09-28 | -0.846488 | -0.235878 | 1.398896 | -0.229573 |
2019-09-29 | 0.975853 | -0.998395 | -0.514480 | -0.882704 |
df.iloc[1:3]
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-25 | 0.090209 | 0.117906 | -0.402183 | 2.261182 |
2019-09-26 | -0.809052 | -0.173144 | 0.324912 | -1.885101 |
df.iloc[1:3, 0:2] # 切片形式,連續性
複制
A | B | |
---|---|---|
2019-09-25 | 0.090209 | 0.117906 |
2019-09-26 | -0.809052 | -0.173144 |
df.iloc[[1, 2, 4], [0, 2]] # 行索引是離散的值
複制
A | C | |
---|---|---|
2019-09-25 | 0.090209 | -0.402183 |
2019-09-26 | -0.809052 | 0.324912 |
2019-09-28 | -0.846488 | 1.398896 |
df.iloc[:, 1:3]
複制
B | C | |
---|---|---|
2019-09-24 | 0.166578 | -0.758513 |
2019-09-25 | 0.117906 | -0.402183 |
2019-09-26 | -0.173144 | 0.324912 |
2019-09-27 | -1.502089 | 1.524401 |
2019-09-28 | -0.235878 | 1.398896 |
2019-09-29 | -0.998395 | -0.514480 |
擷取具體位置的元素
df.iloc[1,2]
複制
-0.4021832300071616
複制
df.iat[1,2] # 等同上面
複制
-0.4021832300071616
複制
布爾索引
df
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-24 | 0.500005 | 0.166578 | -0.758513 | -0.679173 |
2019-09-25 | 0.090209 | 0.117906 | -0.402183 | 2.261182 |
2019-09-26 | -0.809052 | -0.173144 | 0.324912 | -1.885101 |
2019-09-27 | 0.310374 | -1.502089 | 1.524401 | 0.269953 |
2019-09-28 | -0.846488 | -0.235878 | 1.398896 | -0.229573 |
2019-09-29 | 0.975853 | -0.998395 | -0.514480 | -0.882704 |
df[df.A > 0] # 将屬性A中大于0的行全部選擇出出來
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-24 | 0.500005 | 0.166578 | -0.758513 | -0.679173 |
2019-09-25 | 0.090209 | 0.117906 | -0.402183 | 2.261182 |
2019-09-27 | 0.310374 | -1.502089 | 1.524401 | 0.269953 |
2019-09-29 | 0.975853 | -0.998395 | -0.514480 | -0.882704 |
df[df > 0]
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-24 | 0.500005 | 0.166578 | NaN | NaN |
2019-09-25 | 0.090209 | 0.117906 | NaN | 2.261182 |
2019-09-26 | NaN | NaN | 0.324912 | NaN |
2019-09-27 | 0.310374 | NaN | 1.524401 | 0.269953 |
2019-09-28 | NaN | NaN | 1.398896 | NaN |
2019-09-29 | 0.975853 | NaN | NaN | NaN |