猿问

如何修复“大小”、“发生在索引城市”错误

我正在尝试使用 Python & Pandas 中的示例将“大小”列中的 NaN 替换为特定值,具体取决于城市。在下面的示例中,如果城市是圣路易斯,我将尝试分配 18 的值。


我使用 lambda 函数来执行此操作,因为原始数据框有很多行重复城市名称,并且只有少数行具有 NaN 值。

当我运行代码时出现错误 - KeyError: ('size', 'occured at index City')


以下是代码片段 -


raw_data = {'City' : ['Dallas', 'Chicago', 'St Louis', 'SFO', 'St Louis'],

            'size': [24, 36, 'NaN', 'NaN', 22],

            'Type' : ['Pie', 'Hallo', 'Zombi', 'Dru', 'Zoro']

}


df = pd.DataFrame(raw_data)

df


df['size'] = df.apply(lambda x : x['size'].fillna(value = 18 if x['City' == 'St Louis'] else x['size'], axis = 1, inplace = True))

df

预期 - 18 将填充到 St. Louis 的大小列中 实际 - KeyError: ('size', 'occured at index City')


慕侠2389804
浏览 104回答 2
2回答

慕妹3242003

如果您要做的只是设置圣路易斯的大小,您可以运行:df.loc[df['City'] == 'St Louis', 'size'] = 18但是,如果您想设置 to 的所有值NaN,18您也可以运行:df.loc[df['size'] == 'NaN', 'size'] = 18如果您只想设置 size 为 的所有 St. Louis 条目的大小NaN,您可以执行以下操作:df.loc[df['City'] == 'St Louis' and df['size'] == 'NaN', 'size'] = 18

慕村9548890

通过fillna方法有一个简单的解决方案df['size'] = df['size'].fillna(18)我没有注意到 - 你用NaN字符串填充单元格,而不是用真正的NaN值。如果您将输入数据更改为raw_data = {'City' : ['Dallas', 'Chicago', 'St Louis', 'SFO', 'St Louis'],            'size': [24, 36, np.NaN, np.NaN, 22],            'Type' : ['Pie', 'Hallo', 'Zombi', 'Dru', 'Zoro']}然后以下方法将允许您按城市名称重新填充大小列单元格df = pd.DataFrame(raw_data)df[['City', 'size']] = df.set_index('City')['size'].fillna({'St Louis': 18, 'SFO': 20}).reset_index()
随时随地看视频慕课网APP

相关分类

Python
我要回答