1、DataFrame切片
(1)df [ [ ‘a ‘] ]
得到一列列名为a的DataFrame
(2)df [ ‘a ‘]
得到一列Name为a的Series
(3)df.loc[ [1,2], [‘a ‘, ‘b ‘] ]
得到第1、2行,a、b列的DataFrame
(4)df.iloc[4:5, 1:3]
得到第4行,1、2列的DataFrame
(5)df.iloc[0, :] 与df.iloc[0]等同
取第0行
2、DataFrame删除
(1)df.drop([列名], axis=1)
删除某一列
(2)df.dropna(how=‘all’)
删除全为nan的行
(3)df.dropna(how=‘any’, axis=1)
删除含有nan的列
(4)df.dropna()与df.dropna(how=‘any’, axis=0)等同
删除含有nan的行
3、DataFrame判定重复
(1)df.duplicated(列名 / subset = 列名, keep=‘first’ / ‘last’ / False)
根据给定列中的value,标出重复的行
参数:
'first': 除第一次出现的重复项,其余重复项均标记为True。
'last': 除最后一次出现的重复项,其余重复项均标记为True。
False: 将所有重复项标记为True。
data2 = {1:[1,2,2],2:[4,2,6],3:[4,2,6]}
df2 = pd.DataFrame(data2)
df2
Out[22]:
1 2 3
0 1 4 4
1 2 2 2
2 2 6 6
dup = df2.duplicated(subset= 1,keep=False)
dup
Out[24]:
0 False
1 True
2 True
dtype: bool
4、DataFrame删除重复
(1)df.drop_duplicates(列名 / subset = 列名, keep=‘first’ / ‘last’ / False)
根据给定列中的value,删除重复的行
keep默认‘first’。
参数:
'first': 除第一个匹配项外,删除其余重复项。
'last': 除最后一个匹配项外,删除其余重复项。
False: 删除所有重复项。
data2 = {1:[1,2,2],2:[4,2,6],3:[4,2,6]}
df2 = pd.DataFrame(data2)
df2
Out[28]:
1 2 3
0 1 4 4
1 2 2 2
2 2 6 6
dup3 = df2.drop_duplicates(1,keep=False)
dup3
Out[29]:
1 2 3
0 1 4 4
(2)df.drop_duplicates()
删除重复的行
5、DataFrame按条件筛选
(1)df [df.列名>,<, = 80]
df[df.math>80]
(2)df.loc[df.列名>,<, = 80, : ]
df.loc[df.math>80,:]
6、DataFrame合并
(1)merge
df.merge(df1, df2, on=列名,)
df1,df2 都有相同的键值列,使用on 指定。
df1 = pd.DataFrame({'key':['d','b','a','c','a','a','d'],
'data':range(7)})
df2 = pd.DataFrame({'key':['a','b','d'],
'data':range(3)})
df1
Out[40]:
key data
0 d 0
1 b 1
2 a 2
3 c 3
4 a 4
5 a 5
6 d 6
df2
Out[41]:
key data
0 a 0
1 b 1
2 d 2
res = pd.merge(df1,df2,on = 'key')
res
Out[39]:
key data_x data_y
0 d 0 2
1 d 6 2
2 b 1 1
3 a 2 0
4 a 4 0
5 a 5 0
df1,df2 键值列不同时,可以通过left_on,right_on 分别指定。
df1 = pd.DataFrame({'lkey':['b','b','a','c','a','a','b'],
'data':range(7)})
df2 = pd.DataFrame({'rkey':['a','b','d'],
'data':range(3)})
df1
Out[43]:
lkey data
0 b 0
1 b 1
2 a 2
3 c 3
4 a 4
5 a 5
6 b 6
df2
Out[44]:
rkey data
0 a 0
1 b 1
2 d 2
res = pd.merge(df1,df2,left_on = 'lkey',right_on = 'rkey')
res
Out[45]:
lkey data_x rkey data_y
0 b 0 b 1
1 b 1 b 1
2 b 6 b 1
3 a 2 a 0
4 a 4 a 0
5 a 5 a 0
df1,df2 的键’c’,’d’都消失了,因为默认使用了内连接‘inner’,我们可以通过how=‘left’,‘right’,’outer’来指定左连接,右连接,全连接。
res = pd.merge(df1,df2,left_on = 'lkey',right_on = 'rkey',how ='outer')
res
Out[47]:
lkey data_x rkey data_y
0 b 0.0 b 1.0
1 b 1.0 b 1.0
2 b 6.0 b 1.0
3 a 2.0 a 0.0
4 a 4.0 a 0.0
5 a 5.0 a 0.0
6 c 3.0 NaN NaN
7 NaN NaN d 2.0
使用on也可以是个列表,来实现针对多个键值进行合并的操作。
df1 = pd.DataFrame({'key1':['foo','foo','bar'],
'key2':['one','two','one'],
'lval':[1,2,3]})
df1
Out[49]:
key1 key2 lval
0 foo one 1
1 foo two 2
2 bar one 3
df2 = pd.DataFrame({'key1':['foo','foo','bar','bar'],
'key2':['one','one','one','two'],
'rval':[4,5,6,7]})
df2
Out[50]:
key1 key2 rval
0 foo one 4
1 foo one 5
2 bar one 6
3 bar two 7
res = pd.merge(df1,df2,on=['key1','key2'],how ='outer')
res
Out[51]:
key1 key2 lval rval
0 foo one 1.0 4.0
1 foo one 1.0 5.0
2 foo two 2.0 NaN
3 bar one 3.0 6.0
4 bar two NaN 7.0
(2)concat
pd.concat([df1,df2],axis=1)
参数:
axis:连接的轴。默认0。0是上下拼接(按行,合并column相同的),1是左右拼接(按列,合并index相同的)。
import pandas as pd
data1 = {
'name': ['张三', '李四', '王五', '赵六', '贾七'],
'math': [68, 79, 83, 65, 92],
'language': [85, 72, 72, 95, 88]
}
df1 = pd.DataFrame(data1, index=['a', 'b', 'c', 'd', 'e'])
df1
Out[32]:
name math language
a 张三 68 85
b 李四 79 72
c 王五 83 72
d 赵六 65 95
e 贾七 92 88
data2 ={
'name':['张三','李四','王五','赵六','贾七'],
'math':[88,69,83,66,97],
'language':[75,82,67,78,56]
}
df2 = pd.DataFrame(data2,index =['c','d','a','b','e'])
df2
Out[35]:
name math language
c 张三 88 75
d 李四 69 82
a 王五 83 67
b 赵六 66 78
e 贾七 97 56
res = pd.concat([df1,df2],axis=1) # 0或者1,默认为0。沿着连接的轴。
print(res)
name math language name math language
a 张三 68 85 王五 83 67
b 李四 79 72 赵六 66 78
c 王五 83 72 张三 88 75
d 赵六 65 95 李四 69 82
e 贾七 92 88 贾七 97 56
res = pd.concat([df1,df2])
print(res)
name math language
a 张三 68 85
b 李四 79 72
c 王五 83 72
d 赵六 65 95
e 贾七 92 88
c 张三 88 75
d 李四 69 82
a 王五 83 67
b 赵六 66 78
e 贾七 97 56
版权声明:本文为sweet1194695742原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。