Python 如何将列表合并到现有数据框中
问题描述
我正在尝试基于另一列的值替换pandas数据框中的一个值。
我在下面创建了一个示例代码来复制这个问题,但实际上我想要的是将一个列添加到现有数据框中,然后根据另一列的值替换占位符信息。我正在使用的数据框(示例中没有)是基于一个Excel文档,将用于网页爬取我想要根据其他列的值返回的信息。只是想事先提一下,以免人们问为什么不直接在数据框中开始ex_list数据。此外,我只想替换满足条件的位置,而不是用固定值替换整个列。
示例代码
## this would be the excel document df
sample_df = pd.DataFrame({"a":[1,2,3,4,5]})
sample_df["b"] = ""
## this data would be webscrapped using information above
ex_list = [[1, "CHANGE"],[4, "CHANGE"]]
for sub in ex_list:
location = sample_df.loc[sample_df['a']==sub[0], 'b'].iloc[0]
sample_df.replace(location, sub[1])
sample.head()
我也尝试过这个,只是玩一下,但结果却相同。
sample_df = pd.DataFrame({"a":[1,2,3,4,5]})
sample_df["b"] = ""
ex_list = [[1, "CHANGE"],[4, "CHANGE"]]
for sub in ex_list:
sample_df[sample_df['a']==sub[0], 'b'].iloc[0] += sub[1]
sample_df.head()
两个输出都是相同的,显示没有变化:
a b
0 1
1 2
2 3
3 4
4 5
我希望得到的输出是这样的
a b
0 1 CHANGE
1 2
2 3
3 4 CHANGE
4 5
我希望能够有另外一双眼睛来看看这个问题。我的“定位数值”的逻辑方法是否正确?我认为 .loc/.iloc 可能是最好的,但也许还有其他更好的索引方式?我对任何解决方案都持开放态度!
解决方案
在我看来,标题使得你的问题成为了一个 XY 问题。我认为你只是想要简单地合并两个对象: merge
# sample_df["b"] = "" # no need for this line anymore
out = sample_df.merge(pd.DataFrame(ex_list, columns=["a", "b"]), how="left")
输出:
print(out)
a b
0 1 CHANGE
1 2 NaN
2 3 NaN
3 4 CHANGE
4 5 NaN