import pandas as pd
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
def calculation(text):
return text*2
for idx, row in df.iterrows():
df.at[idx, 'col3'] = dict(cats=calculation(row['col1']))
df
因此,从上面的代码中可以看到,我尝试了一些不同的事情。
基本上,我正在尝试将字典导入col3。
但是,当您第一次在新数据框上运行时,您会得到
col1 col2 col3
0 1 3 cats
1 2 4 {'cats': 4}
如果在同一数据帧上再次运行for循环,则会得到我正在寻找的内容
col1 col2 col3
0 1 3 {'cats': 2}
1 2 4 {'cats': 4}
如何直接在其中启动字典而不必再次运行循环?
我尝试了其他方法,例如df.loc和其他方法,仍然没有乐趣。
答案 0 :(得分:-1)
尝试远离df.iterrows()
。
您可以改用df.apply
:
import pandas as pd
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
def calculation(text):
return text*2
def calc_dict(row):
return dict(cats=calculation(row['col1']))
df['col3'] = df.apply(calc_dict, axis=1)
df
输出期望的结果。
错误似乎随着对象数据类型的创建和分配给col col3
而蔓延。我试图用df['col3'] = pd.np.NaN
预先分配给NaN,但没有效果(检查print(df.dtypes)
)。无论如何,这似乎是越野车的行为。请改用df.apply
,它更快,更不容易出现这类问题。