基本操作,查詢就找這里
首先生成一個dataframe數據
df2 = pd.DataFrame(np.arange(16).reshape((4, 4)), #print(np.arange(20).reshape(4,5)) index=['Qingdao', 'Jinan', 'Yantai', 'Linyi'], columns=['A', 'B', 'C', 'D']) print(df2)
運行結果
A B C D Qingdao 0 1 2 3 Jinan 4 5 6 7 Yantai 8 9 10 11 Linyi 12 13 14 15
刪除行
這里用法要注意,這個刪除不是在df2的基礎上“刪除”,是生成了一個信的二維數組。
df2.drop(['Jinan', 'Linyi']) #這里打印df2,是沒有任何改變的
a=df2.drop(['Jinan', 'Linyi'])
print(a) #正確的是打印a
a=df2.drop(['Jinan', 'Linyi'],axis=0) #也可以寫成這樣,axis=0 是確定軸
運行結果
A B C D Qingdao 0 1 2 3 Yantai 8 9 10 11
刪除列
同理
a=df2.drop(['B', 'D'], axis=1)
print(a)
運行結果
A C Qingdao 0 2 Jinan 4 6 Yantai 8 10 Linyi 12 14
選擇列,多列
print(df2['B'] ) # 選擇列,這是一維 print(type(df2['B'])) print(df2[['B', 'C']]) # 選擇多列,這是二維 print(type(df2[['B', 'C']]))
運行結果
Qingdao 1 Jinan 5 Yantai 9 Linyi 13 Name: B, dtype: int32 <class 'pandas.core.series.Series'> B C Qingdao 1 2 Jinan 5 6 Yantai 9 10 Linyi 13 14 <class 'pandas.core.frame.DataFrame'>
按照條件過濾
按照條件過濾優先獲得的是二維的 #我就是這么理解的就行了,不是獲得一個串,是一個面
print(df2)
a=df2[df2['C'] > 5] #這里不太好理解,總之輸出的是個二維的
print(a)
運行結果
A B C D Qingdao 0 1 2 3 Jinan 4 5 6 7 Yantai 8 9 10 11 Linyi 12 13 14 15 A B C D Jinan 4 5 6 7 Yantai 8 9 10 11 Linyi 12 13 14 15
為了更好的理解,下邊是幾個對比
b=df2[df2['C'] > 0] print(b) c=df2[df2['D'] > 8] print(c)
運行結果
A B C D Qingdao 0 1 2 3 Jinan 4 5 6 7 Yantai 8 9 10 11 Linyi 12 13 14 15 #c > 0 A B C D Yantai 8 9 10 11 Linyi 12 13 14 15 #d > 8
數據選取
通過標簽索引取行與列
這里loc都是取索引值,也就是說取行的時候用,取列不需要用loc,直接找列的‘name’即可。 行是loc,列是‘name’
df2.loc['Yantai'] # 通過標簽索引取行 這里的索引就是用loc獲取
print(df2['A']) # 取列,直接用‘name’
df2.loc['Yantai', 'D'] # 通過標簽索引同時取行和列 同時取行與列,確定一個點,兩條直線相交 df2.iloc[0] # 通過數字標簽取行 index【0】的行 df2.iloc[0, [1, 2]] # 通過數字標簽同時取行和列 index【0】的行的第【1,2】兩個元素
運行結果
A 8 B 9 C 10 D 11 Name: Yantai, dtype: int32
#對比 Qingdao 0 Jinan 4 Yantai 8 Linyi 12 Name: A, dtype: int32 ############## 11 #這里兩個條件確定一個點 ############## A 0 B 1 C 2 D 3 Name: Qingdao, dtype: int32 ############## B 1 C 2 Name: Qingdao, dtype: int32
練習:
# 練習,下面這行代碼會有什么效果?
df2.loc[:'Yantai', 'B':] # 練習,取出后三行中 ‘C’ 列 > 5 的那些行,如何寫?
理解第一個小練習需要用到切片的知識
這里復習下切片的知識
Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元組。
格式:【start:end:step】
start:起始索引,從0開始,-1表示結束
end:結束索引
step:步長,end-start,步長為正時,從左向右取值。步長為負時,反向取值
注意切片的結果不包含結束索引,即不包含最后的一位,-1代表列表的最后一個位置索引
那么就很好理解了
a=[1,2,3,'ww',4,5,6,7,'b',8,9] print(a[2:]) print(a[:2]) print(a[1:]) print(a[-1:]) print(a[::-1]) print(df2.loc[:'Yantai', 'B':])
運行結果
[3, 'ww', 4, 5, 6, 7, 'b', 8, 9] [1, 2] [2, 3, 'ww', 4, 5, 6, 7, 'b', 8, 9] [9] [9, 8, 'b', 7, 6, 5, 4, 'ww', 3, 2, 1] B C D Qingdao 1 2 3 Jinan 5 6 7 Yantai 9 10 11
# 練習,取出后三行中 ‘C’ 列 > 5 的那些行,如何寫?
print(df2[-3:][df2['C'] > 5])
我是這么想的,但是報警了UserWarning: Boolean Series key will be reindexed to match DataFrame index.
但是結果是對的