如何替换Pandas.DataFrame上的整个列

时间:2016-04-25 16:26:28

标签: python pandas

我想用另一个DataFrame中的另一列替换Pandas DataFrame上的整个列,一个例子将阐明我在寻找什么

import pandas as pd
dic = {'A': [1, 4, 1, 4], 'B': [9, 2, 5, 3], 'C': [0, 0, 5, 3]}
df = pd.DataFrame(dic)

df是

'A' 'B' 'C'
 1   9   0
 4   2   0
 1   5   5
 4   3   3

现在我有另一个名为df1的数据框,其中“E”列是

df1['E'] = [ 4, 4, 4, 0]

我想将df的列“B”替换为df1

的列“E”
'A' 'E' 'C'
 1   4   0
 4   4   0
 1   4   5
 4   0   3

我试图在很多方面使用.replace()方法,但我没有得到任何好处。你能救我吗?

3 个答案:

答案 0 :(得分:28)

如果指数匹配则:

df['B'] = df1['E']

应该另有效果:

df['B'] = df1['E'].values
只要元素的长度匹配

就会起作用

答案 1 :(得分:3)

对于那些与" SettingWithCopy"警告,这是一种可能效率不高的解决方法,但仍可完成工作。

假设您要覆盖column_1和column_3,但保留column_2和column_4

columns_to_overwrite = ["column_1", "column_3"]

首先删除要替换的列...

original_df.drop(labels=columns_to_overwrite, axis="columns", inplace=True)

...然后重新插入列,但使用您要覆盖的值

original_df[columns_to_overwrite] = other_data_frame[columns_to_overwrite]

答案 2 :(得分:3)

如果您不介意返回新的数据框对象,而不是更新原始的Pandas .assign(),则可以避免SettingWithCopyWarning。您的示例:

df = df.assign(B=df1['E'])