为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2022-06-28 17:23:26
我正在尝试使用 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)dfdf['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')
查看完整描述

2 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

如果您要做的只是设置圣路易斯的大小,您可以运行:

df.loc[df['City'] == 'St Louis', 'size'] = 18

但是,如果您想设置 to 的所有值NaN18您也可以运行:

df.loc[df['size'] == 'NaN', 'size'] = 18

如果您只想设置 size 为 的所有 St. Louis 条目的大小NaN,您可以执行以下操作:

df.loc[df['City'] == 'St Louis' and df['size'] == 'NaN', 'size'] = 18


查看完整回答
反对 回复 2022-06-28
?
慕村9548890

TA贡献1884条经验 获得超4个赞

通过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()



查看完整回答
反对 回复 2022-06-28
  • 2 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信