使用Pandas串联将一列添加到数据框

时间:2018-08-03 07:42:36

标签: python pandas concatenation

我有“ train_df”数据框,其中:

print(train_df.shape)

返回(997,600)。

现在我想将一列连接到该数据框,其中:

print(len(local_df["target"]))

返回997。

因此,看来尺寸一切正常。

但是问题在于:

final_df = pd.concat([train_df, local_df["target"]], axis=1)
print(final_df.shape)

返回(1000,601)。 而应该是(997,601)。

你知道是什么问题吗?

3 个答案:

答案 0 :(得分:2)

您可以assign将一个numpy数组作为新列。

final_df = train_df.assign(target=local_df["target"].values)

答案 1 :(得分:1)

我认为问题出在索引值不同,所以解决方案是由reset_index使用参数drop=True创建的:

final_df = pd.concat([train_df.reset_index(drop=True), 
                     local_df["target"].reset_index(drop=True)], axis=1)
print(final_df.shape)

或通过local_df设置train_df.index的索引:

final_df = pd.concat([train_df, 
                     local_df["target"].set_index(train_df.index)], axis=1)
print(final_df.shape)

答案 2 :(得分:0)

如何加入?

import pandas as pd
df=pd.DataFrame({'a':[1,2,3],'b':[4,5,6]})
df2=pd.DataFrame({'c':[232,543,562]})
print(df.reset_index(drop=True).join(df2.reset_index(drop=True), how='left'))

输出:

   a  b    c
0  1  4  232
1  2  5  543
2  3  6  562