Python Pandas Dataframe-迭代行并添加字典问题

时间:2019-03-22 10:31:05

标签: python pandas dataframe dictionary

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和其他方法,仍然没有乐趣。

1 个答案:

答案 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,它更快,更不容易出现这类问题。