pandas
query
- 比较符号
1和2的结果是一样的。query可以用更复杂的查找。比如data = [{'name':'qqq','age':11},{'name':'www','age':22},{'name':'eee','age':33},{'name':'rrr','age':44}] df = pd.DataFrame(data) #1 print(df[df['age']>22]) #2 -----------------------
- 逻辑
中间的逻辑符号也可以用and来代替df.query('a < b < c') df.query('a < b & b < c')
- in 和 not in
print(df.query('age not in level'))
duplicated (处理重复数据)
对于重复数据可以查看是否重复,除了第一次出现的。第一次都视为没有重复。
df2.duplicated('a', keep=False)
---------------
0 True
1 True
2 True
3 True
4 True
5 False
6 False
删除重复数据
df2.drop_duplicates('a')
默认为保留第一次出现的。keep参数last,保留最后一次的。为False全部删除。
里面的参数也可以是一个列表
比如[‘a’,‘b’]表示a和b是一个组。他们两个一起没有重复的
多个表处理
- 合并
df1 = ....
df2 = ....
df3 = ....
all = [df1,df2,df3]
result = df.concat(all)
默认是将行合并起来,设置参数axis=1,合并为列
- 联合查询
类似于sql里面的join语法。
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
result = pd.merge(left, right, on='key',how='left')
参数解析:left和right为要联合的表。on是要关联的键,可以理解为excel里面的vlooup函数。how是如何关联。默认为inline,是去两个表的公共值。也可以是left,right,outer(并集)。和sql里面左连接,右链接,内连接类似。
也可以可以使用join
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']},
index=['K0', 'K1', 'K2'])
right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],
'D': ['D0', 'D2', 'D3']},
index=['K0', 'K2', 'K3'])
result = left.join(right,how='outer')
join是根据索引来进行合并的。
left 以left索引为主。
outer 取并集
inner 取交集
join和merge。merge是根据column也就是列来提取匹配结果。join是根据index,也就是索引,也就是行来提取匹配的。