在使用pandas过程中,对2个df进行列合并的需求可以分为两种:
1、将一个df的某一列赋值给另一个df。
2、两个df进行关联。
对于第二种需求,常用方法有pd.merge、pd.concat(axis=1),这两种函数的使用网上都有很多教程,在此不过多叙述,今天主要针对第一种需求进行分析。
针对第一种需求,可以有两种方法实现:
1、直接赋值。
2、使用pd.concat。
若需要将一个df的一列全部赋值给另一个df,两种方法直接使用即可。如:
import pandas as pd
df_a = pd.DataFrame([1,2,3,4,5],columns=['a'])
df_b = pd.DataFrame([6,7,8,9,10],columns=['b'])
# 方法1:直接赋值
df_a['b'] = df_b['b']
# 方法2:使用pd.concat
df_a = pd.concat([df_a['a'],df_b['b']],axis = 1)
而如果仅将部分行进行赋值的话,通过iloc或loc对源df进行行选择时,被赋值df也会跳过未选择的行。如,将df_b的第4行到最后赋值给df_a,则会出现如下这种情况。
import pandas as pd
df_a = pd.DataFrame([1,2,3,4,5],columns=['a'])
df_b = pd.DataFrame([6,7,8,9,10,11,12,13],columns=['b'])
# 方法1:直接赋值
df_a['b'] = df_b['b'].iloc[3:]
# df_a:
# a b
# 0 1 NaN
# 1 2 NaN
# 2 3 NaN
# 3 4 9.0
# 4 5 10.0
# 方法2:使用pd.concat
df_a = pd.concat([df_a['a'],df_b['b'].iloc[3:]],axis = 1)
# df_a
# a b
# 0 1.0 NaN
# 1 2.0 NaN
# 2 3.0 NaN
# 3 4.0 9.0
# 4 5.0 10.0
# 5 NaN 11.0
# 6 NaN 12.0
# 7 NaN 13.0
笔者找到的一种解决办法是将df_b选取后的df转化为list进行赋值即可解决。使用concat如何实现以下需求,笔者还未找到答案。
import pandas as pd
df_a = pd.DataFrame([1,2,3,4,5],columns=['a'])
df_b = pd.DataFrame([6,7,8,9,10,11,12,13],columns=['b'])
# 方法1:直接赋值
df_a['b'] = list(df_b['b'].iloc[3:])
# df_a:
# a b
# 0 1 9
# 1 2 10
# 2 3 11
# 3 4 12
# 4 5 13