为了账号安全,请及时绑定邮箱和手机立即绑定

追加 pandas 数据框问题

追加 pandas 数据框问题

人到中年有点甜 2023-07-18 09:44:10
我有两个数据框,有 2100 行 × 857 列。我想将第二个附加到第一个。我用X_train_features = X_train_features.append(X_train_Specfeatures, ignore_index= True)这个。但我得到的数据框不是 4200 行 x 857 列,而是 4200 行 x 1714 列。看看下面的图片。这是第一个数据框。这是第二个。我通过附加得到的输出是我不明白出了什么问题。
查看完整描述

3 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

事实上,您想要的是连接两个数据框。

您可以使用 pd.concat()

pd.concat([first_df,second_df],axis=0)


查看完整回答
反对 回复 2023-07-18
?
慕后森

TA贡献1802条经验 获得超5个赞

合并两个数据框的常用方法是使用 pandas .concat() 函数。然后,您必须指定 axis = 0 以根据列的标签合并数据框:


df1=pd.DataFrame({"a":[1,2,3],"b":[4,5,6]})

df2=pd.DataFrame({"a":[7,8,9],"b":[10,11,12]})

pd.concat([df1,df2],axis=0)


查看完整回答
反对 回复 2023-07-18
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

也许你可以解决你的具体问题


X_train_Specfeatures.columns = X_train_features.columns

背景


正如评论中提到的,当两个 dfs 的列标签不相同时,通常会发生这种情况。


拿这两个dfs


df = pd.DataFrame([[0, 1], [2, 3]])

df2 = df.copy()

如果您append(或concat,都一样),您将得到 4x2 df,因为列标签完全相同。


# df_out = df.append(df2, ignore_index=True)

df_out = pd.concat([df, df2])


print(df_out)


   0  1

0  0  1

1  2  3

2  0  1

3  2  3

但是,如果您更改一个 df 中的列名称,您将得到一个 4x4 df,因为 pandas 会尝试对齐列标签。


df2.columns = ['0', '1']


# df_out = df.append(df2, ignore_index=True)

df_out = pd.concat([df, df2], ignore_index=True)


print(df_out)


     0    1    0    1

0  0.0  1.0  NaN  NaN

1  2.0  3.0  NaN  NaN

2  NaN  NaN  0.0  1.0

3  NaN  NaN  2.0  3.0

请注意,即使列名打印相同,它们实际上是不同的值(一个 df0是整数,另一个是字符串)。因此 pandas 将它们解释为不同的列,并且由于第二个 df 没有第一列的值,因此它会填充NaN.

查看完整回答
反对 回复 2023-07-18
  • 3 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信