Pandas列拼接问题:索引不一致的DataFrame合并求助
嘿,我来帮你搞定这个DataFrame拼接的问题!首先你写的pd.concat(df1,df2,axis=1)本身就有个小错误——pd.concat的第一个参数得是包含DataFrame的列表,正确的基础写法应该是pd.concat([df1, df2], axis=1)。不过即使修正了这个,如果两个DataFrame的索引不一致,默认会按索引对齐,结果里可能会出现很多NaN,这应该不是你想要的对吧?
下面根据不同的需求给你几种解决方案:
情况1:按行位置直接拼接(完全忽略索引)
如果你想要的是不管两个表的索引是什么,直接把第一行和第一行拼、第二行和第二行拼,那先把两个DataFrame的索引重置掉再拼接就行:
# 重置索引,drop=True是为了不保留原来的索引列 df1_reset = df1.reset_index(drop=True) df2_reset = df2.reset_index(drop=True) df3 = pd.concat([df1_reset, df2_reset], axis=1)
情况2:基于某一列对齐拼接(不用索引)
要是你想基于两个表里共同的某一列(比如叫id或者key)来对齐数据,那用pd.merge会更合适:
# 只保留两边都有匹配值的行(内连接) df3 = pd.merge(df1, df2, on='共同列名', how='inner') # 保留所有行,没有匹配的地方补NaN(外连接) df3 = pd.merge(df1, df2, on='共同列名', how='outer') # 保留df1的所有行,df2没有匹配的补NaN(左连接) df3 = pd.merge(df1, df2, on='共同列名', how='left')
情况3:保留某一方的索引并对齐
如果希望保留其中一个DataFrame的索引,另一个表按这个索引来对齐,那用join方法更直观:
# 保留df1的索引,把df2按索引拼过来,没有匹配的补NaN df3 = df1.join(df2, how='left') # 保留df2的索引,用右连接 df3 = df1.join(df2, how='right') # 保留所有索引,缺失值补NaN df3 = df1.join(df2, how='outer')
内容的提问来源于stack exchange,提问作者Ahamed Moosa
相关产品推荐
相关产品推荐

