【发布时间】:2021-11-27 21:07:46
【问题描述】:
我有数据框,如果值包含“:”,我正在尝试拆分 col1 字符串值并获取第一个元素,然后将其放入另一个 col2 中,如下所示:
df['col1'] = df['col1'].astype(str)
df['col2'] = df['col1'].astype(str)
for i, row in df.iterrows():
if (":") in row['col1']:
row['col2'] = row['col1'].split(":")[1]+" "+ "in Person"
row['col1'] = 'j'
它正在处理这样的示例数据帧,但它不会改变原始数据帧中的结果--
import pandas as pd
d = {'col1': ['a:b', 'ac'], 'col2': ['z 26', 'y 25']}
df = pd.DataFrame(data=d)
print(df)
col1 col2
j b in Person
ac y 25
我做错了什么以及这种情况的替代方法。
【问题讨论】:
-
row是一个新系列,而不是对原始数据框中的行的引用。 -
来自文档DataFrame.iterrows(注 2):“您应该永远不要修改您正在迭代的内容。这不能保证在所有情况下都有效。取决于数据类型,迭代器返回一个副本而不是一个视图,写入它不会有任何效果。”
-
当然不是。你期望它是什么?
标签: python pandas dataframe for-loop