pandas实现数据的合并concat--未完

#使用场景批量合并相同格式的excel,或者给DataFrame添加行,给DataFrame添加列
#可以使用某种合并方式(inner/outer);沿着某个轴向(axis=0/1);把多个pandas对象(DataFrame/Series)合并成一个;
concat相当于堆积,语法:
pandas.concat(objs,axis=0,join='outer',ignore_index=False)
objs:一个列表,内容可以是DataFrame或者Series,可以混合 
join:合并的时候索引的方式,默认是outer,也可以inner 
ignore_index:是否忽略掉原来的数据索引,产生一个新的index

append语法 : DataFrame.append(other,ignore_index=False)
append 只有按照行合并,没有按照列合并,相当于concat 按行的简写形式,也就把一个表放在另一个表的下面 
other:单个DataFrame,Series,dit,hasattr者列表
import pandas as pd 
import warnings
warnings.filterwarnings('ignore')
df1 = pd.DataFrame({'A':['A0','A1','A2','A3'],
                    'B':['B0','B1','B2','B3'],
                    'C':['C0','C1','C2','C3'],
                    'D':['D0','D1','D2','D3'],
                    'E':['E0','E1','E2','E3'],
 })
df2 = pd.DataFrame({'A':['A4','A5','A6','A7'],
                    'B':['B4','B5','B6','B7'],
                    'C':['C4','C5','C6','C7'],
                    'D':['D4','D5','D6','D7'],
                    'F':['F4','F5','F6','F7'],    
})

df1
ABCDE
0A0B0C0D0E0
1A1B1C1D1E1
2A2B2C2D2E2
3A3B3C3D3E3
df2
ABCDF
0A4B4C4D4F4
1A5B5C5D5F5
2A6B6C6D6F6
3A7B7C7D7F7
pd.concat([df1,df2])#concat就是两个表上下叠在一起,如果列名不同则填充NaN
ABCDEF
0A0B0C0D0E0NaN
1A1B1C1D1E1NaN
2A2B2C2D2E2NaN
3A3B3C3D3E3NaN
0A4B4C4D4NaNF4
1A5B5C5D5NaNF5
2A6B6C6D6NaNF6
3A7B7C7D7NaNF7
pd.concat([df1,df2],ignore_index=True)
ABCDEF
0A0B0C0D0E0NaN
1A1B1C1D1E1NaN
2A2B2C2D2E2NaN
3A3B3C3D3E3NaN
4A4B4C4D4NaNF4
5A5B5C5D5NaNF5
6A6B6C6D6NaNF6
7A7B7C7D7NaNF7
#使用join=inner过滤掉不匹配的列
pd.concat([df1,df2],ignore_index=True,join='inner')
ABCD
0A0B0C0D0
1A1B1C1D1
2A2B2C2D2
3A3B3C3D3
4A4B4C4D4
5A5B5C5D5
6A6B6C6D6
7A7B7C7D7
#添加一列Series
s1 = pd.Series(list(range(4)),name = 'F')
pd.concat([df1,s1],axis = 1)
ABCDEF
0A0B0C0D0E00
1A1B1C1D1E11
2A2B2C2D2E22
3A3B3C3D3E33
#添加多列Series
s2 = df1.apply(lambda x:x['A']+'_GG',axis = 1)
s2
0    A0_GG
1    A1_GG
2    A2_GG
3    A3_GG
dtype: object
s2.name = 'G'
pd.concat([df1,s1,s2],axis=1) 
ABCDEFG
0A0B0C0D0E00A0_GG
1A1B1C1D1E11A1_GG
2A2B2C2D2E22A2_GG
3A3B3C3D3E33A3_GG
pd.concat([df1,s1,s2],axis=0) 
0ABCDE
0NaNA0B0C0D0E0
1NaNA1B1C1D1E1
2NaNA2B2C2D2E2
3NaNA3B3C3D3E3
00NaNNaNNaNNaNNaN
11NaNNaNNaNNaNNaN
22NaNNaNNaNNaNNaN
33NaNNaNNaNNaNNaN
0A0_GGNaNNaNNaNNaNNaN
1A1_GGNaNNaNNaNNaNNaN
2A2_GGNaNNaNNaNNaNNaN
3A3_GGNaNNaNNaNNaNNaN
pd.concat([s1,s2],axis=1) 
FG
00A0_GG
11A1_GG
22A2_GG
33A3_GG
pd.concat([s1,df1,s2],axis=1) 
FABCDEG
00A0B0C0D0E0A0_GG
11A1B1C1D1E1A1_GG
22A2B2C2D2E2A2_GG
33A3B3C3D3E3A3_GG
#append()函数
df001 = pd.DataFrame([[1,2],[3,4]],columns = list('AB'))
df002 = pd.DataFrame([[5,6],[7,8]],columns = list('AB'))
df001
AB
012
134
df002
AB
056
178
df001.append(df002)
AB
012
134
056
178
df003 = pd.DataFrame([[9,10],[11,12]],columns = list('CD'))
df003
CD
0910
11112
df001.append(df003)
ABCD
01.02.0NaNNaN
13.04.0NaNNaN
0NaNNaN9.010.0
1NaNNaN11.012.0
#可以一行一行的给DataFrame添加数据
df = pd.DataFrame(columns=['A'])#这是创建一个空的df,注意列名需要用中括号[]
df
A
#for循环,每次添加一行值
for i in range(5):
    df = df.append({'A':i},ignore_index=True)
df
#注意这里的append新的用法,以及循环添加值是用过字典的方式{}添加的。
A
00
11
22
33
44

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值