pandas中concat/append方法

目录

concat方法

concat语法

concat代码​​

append方法

append语法

append代码

concat方法

concat⽅法类似于数据库中union all,在不同的轴方向上都可以不去重的合并数据对象

concat语法

pandas.concat(objsaxis=0join='outer'ignore_index=Falsekeys=Nonelevels=Nonenames=Noneverify_integrity=Falsesort=Falsecopy=True)

参数说明:

参数axis=0,默认按0轴连接,也可指定为其他数字按其他轴连接;参数join='outer',默认指定另一个轴的连接方式为取并集,也可指定为inner取交集;参数ignore_index=False,默认连接的轴索引仍继承之前的DataFrame或Series索引,也可指定为True表示连接的轴索引重置为0、1……;参数keys/levels/names和构建层次索引有关,其他参数暂略

参数详解:

pandas.concat — pandas 1.4.2 documentation (pydata.org)

concat代码

#导入包
import pandas as pd

#构造数据
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                    index=[0, 1, 2, 3])    
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'D': ['D4', 'D5', 'D6', 'D7']},
                    index=[2, 3, 4, 5])

print('df1:\n',df1)
print('df2:\n',df2)

参数axis指定按某个轴连接,默认0,也可指定其他数字:

result1 = pd.concat([df1, df2])        #默认按axis=0连接
result2 = pd.concat([df1, df2],axis=1) #指定按axis=1连接
print('result1:\n',result1)
print('result2:\n',result2)

参数join指定另一个轴连接的⽅式,默认'outer',也可指定‘inner’:

result1 = pd.concat([df1, df2], axis=1)                #默认join='outer'
result2 = pd.concat([df1, df2], axis=1, join='inner')  #指定join='inner'
print('result1:\n',result1)
print('result2:\n',result2)

#使用df1的索引,去掉df2特有的索引
result3 = pd.concat([df1, df2], axis=1).reindex(df1.index)
result4 = pd.concat([df1, df2.reindex(df1.index)], axis=1)
print('result3:\n',result3)
print('result4:\n',result4)

参数ignore_index,默认False,也可指定为True重置索引

result1 = pd.concat([df1, df2]) #默认ignore_index=False 
result2 = pd.concat([df1, df2], ignore_index=True)#指定ignore_index=True,从0开始重置索引 
print('result1:\n',result1) 
print('result2:\n',result2)

构建层次化索引的两种方式,1)参数keys传入序列,2)参数objs选择传入字典

#创建层次化索引的两种方式,参数keys传入序列和参数objs传入字典,或者结合起来
result1 = pd.concat([df1,df2], keys=['x', 'y'])
result2 = pd.concat({'x':df1,'y':df2},axis=1)
result3 = pd.concat({'x':df1,'y':df2,'z':df2},axis=1, keys=['z', 'x'])
print('result1:\n',result1)
print('result2:\n',result2)
print('result3:\n',result3)

#通过层次化索引读取数据
print()
print(result1.loc['x'])
print(result2.loc[:,'x'])

​ 

DataFrame和Series连接或多个Series连接

s1 = pd.Series(['X0', 'X1', 'X2', 'X3'], name='X')
s2 = pd.Series(['0', '1', '2', '3'])

#默认继承之前的索引名,没有索引名的使用0,1…
result1 = pd.concat([df1, s1, s2, s2], axis=1)
#通过ignore_index=True可以重置索引名
result2 = pd.concat([df1, s1, s2, s2], axis=1, ignore_index=True)

#通过多个Series构建DataFrame时,可通过keys参数重置索引名
result3 = pd.concat([s1, s2, s2], axis=1, keys=['red', 'blue', 'green'])

print('result1:\n',result1)
print('result2:\n',result2)
print('result3:\n',result3)

append方法

类似于concat,作用是向DataFrame或Series增加新的数据⾏

append语法

DataFrame.append的语法:

DataFrame.append(otherignore_index=Falseverify_integrity=Falsesort=False)

Series.append的语法:

Series.append(to_appendignore_index=Falseverify_integrity=False)

参数说明:

参数ignore_index=False,默认行索引仍继承之前的DataFrame或Series索引,也可指定为True表示将行索引重置为0、1……;其他参数暂略

参数详解:

pandas.Series.append — pandas 1.4.2 documentation (pydata.org)

pandas.DataFrame.append — pandas 1.4.2 documentation (pydata.org)

append代码

append两个对象或多个对象

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                    index=[0, 1, 2, 3])   
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'D': ['D4', 'D5', 'D6', 'D7']},
                    index=[2, 3, 4, 5])
df3 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
                    'D': ['D2', 'D3', 'D6', 'D7'],
                    'F': ['F2', 'F3', 'F6', 'F7']},
                    index=[2, 3, 6, 7])

result1 = df1.append(df2)             #连接两个对象df1和df2
result2 = df1.append([df2, df3])      #连接多个对象
print('result1:\n',result1)
print('result2:\n',result2)

参数ignore_index,默认False,也可指定为True重置索引

result1 = df1.append(df2) #默认ignore_index=False 
result2 = df1.append(df2, ignore_index=True) #指定ignore_index=True,从0开始重置索引 
print('result1:\n',result1) 
print('result2:\n',result2)

DataFrame和Series或字典连接

#DataFrame和Series连接
s = pd.Series(['X0', 'X1', 'X2', 'X3'], index=['A', 'B', 'C', 'D'])
result1 = df1.append(s, ignore_index=True)
print('result1:\n',result1)

#DataFrame和字典连接
dicts = [{'A': 1, 'B': 2, 'C': 3, 'X': 4},{'A': 5, 'B': 6, 'C': 7, 'Y': 8}]
result2 = df1.append(dicts, ignore_index=True)
print('result2:\n',result2)

 参考资料:Merge, join, and concatenate | Pandas 中文 (pypandas.cn)

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值