Python 如何将列表合并到现有数据框中

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程