Python Dataframe 使用 join 不生效

我有一个Dataframe
df = pd.DataFrame({'taskId':['A;B','B;C','D;E','A;C']})
我想以";"提取每一个第一个元素

img

df = pd.DataFrame({'taskId':['A;B','B;C','D;E','A;C']})
df['get']=None
for index,row in df.iterrows():
    list10=row['taskId'].split(";")
    list20=list10[0]
    row['get']= ''.join(list20)
print(df)

我尝试以上的写法,但是print出来 join是无值

img

应该怎么写可以达到我的目的

这段代码的作用是:

  1. 建立一个名为 df 的 Pandas DataFrame,其中包含一个名为 'taskId' 的字符串列。
  2. 遍历 DataFrame 的每一行,并将 'taskId' 列中的字符串按照 ';' 分割成列表形式。
  3. 从分割后的列表中取出第一个字符串,赋值给一个名为 'list20' 的新列表。
  4. 将 'list20' 中的所有元素连接成一个新的字符串,赋值给该行的 'get' 列。

但是,这段代码存在一个问题:通过使用 row['get'] = ... 的方式更新 DataFrame 中的数据是无效的,因为它只是更改了变量 row 中的 get 值,而不是实际地更新 DataFrame 中的数据。要正确地更新 DataFrame,请使用 .loc 方法:

df.loc[index, 'get'] = ''.join(list20)

经过这样的修改,代码就可以正确执行并且将新的 'get' 列更新到原始的 DataFrame 中了。

迭代的时候没有更新每一行

img

import pandas as pd

df = pd.DataFrame({'taskId': ['A;B', 'B;C', 'D;E', 'A;C']})
df['get'] = None

for index, row in df.iterrows():
    list10 = row['taskId'].split(";")
    list20 = list10[0]
    df.loc[index, 'get'] = ''.join(list20)

print(df)


不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇文章讲的很详细,请看:python dataframe join
  • 以下回答来自chatgpt:

    答案:

    要使用Python Dataframe进行join操作,可以使用merge方法。具体步骤如下:

    1. 读取需要合并的两个或多个数据集到不同的dataframe中。
    2. 确定合并方式(开发人员可以选择inner/outer/left/right join等)。
    3. 指定合并的列。
    4. 执行合并操作。

    示例代码如下:

    import pandas as pd
    
    # 读取需要合并的两个csv文件
    df1 = pd.read_csv('data1.csv')
    df2 = pd.read_csv('data2.csv')
    
    # 指定要合并的列
    merge_col = 'id'
    
    # 按照指定列进行合并操作
    result = pd.merge(df1, df2, on=merge_col)
    
    # 输出合并后的结果
    print(result.head())
    

    在实际合并数据集的时候,还需要注意以下几点:

    1. 数据集的列名需要一致。
    2. merge方法默认以inner join的方式进行合并,可以通过how参数指定合并方式。
    3. 如果有多个列需要合并,可以使用on参数指定多个列。
    4. 如果两个数据集中的列名不一致,可以通过left_on和right_on参数指定左右数据集中的列。
    5. 如果有多个列需要合并,并且两个数据集中的列名都不一致,需要分别使用left_on和right_on指定左右数据集中的列。

    希望以上内容可以帮助到你。如果还有问题,欢迎继续提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^