详解pandas赋值失败问题解决
本文深入解析pandas中DataFrame赋值失败的常见场景,涵盖整列直接赋值、单值与多值非整列赋值以及跨列赋值的正确做法。重点阐述使用.loc进行条件赋值时因形状不匹配导致的报错原因,并提供通过.values.tolist()获取列表的正确实现方式,帮助开发者避免常见陷阱。
pandas整列赋值方法
一、pandas对整列赋值
这种情况相对常规,通常可以直接进行赋值操作:
x = pd.DataFrame({'A': ['1', '2', '3', None, None],
'B': ['4', '5', '6', '7', None]})
x['A'] = ['10', '11', '12', '13', '14']

pandas非整列赋值陷阱与解决
二、pandas对非整列赋值
1、用单个值赋值
x = pd.DataFrame({'A': ['1', '2', '3', None, None],
'B': ['4', '5', '6', '7', None]})
index = x['A'].isna()
x[index]['A'] = 100

结果可能令人困惑,赋值操作看似未生效。
2、用多个值赋值
x = pd.DataFrame({'A': ['1', '2', '3', None, None],
'B': ['4', '5', '6', '7', None]})
index = x['A'].isna()
x[index] = [100, 200]

此时会触发报错,系统提示建议使用.loc进行赋值,我们可以尝试这种方法。
3、.loc赋值
x = pd.DataFrame({'A': ['1', '2', '3', None, None],
'B': ['4', '5', '6', '7', None]})
index = x['A'].isna()
x.loc[index, ['A']] = [100, 200]

尽管使用了.loc,仍然出现报错,这通常是由于数据形状(shape)不匹配所致。
x.loc[index, ['A']] = [['100'], ['200']]

pandas跨列赋值的正确实践
三、用数据的另外一列赋值
1、错误方式
x = pd.DataFrame({'A': ['1', '2', '3', '', ''],
'B': ['4', '5', '6', '7', '']})
index = x['A'].isna()
x.loc[index, ['A']] = x.loc[index, ['B']]

正确方式
x = pd.DataFrame({'A': ['1', '2', '3', '', ''],
'B': ['4', '5', '6', '7', '']})
index = x['A'].isna()
x.loc[index, ['A']] = x.loc[index, ['B']].copy().values.tolist()

至此,关于pandas赋值失败问题的详细解析已介绍完毕。如需了解更多相关pandas赋值失败的内容,建议查阅本站历史文章或继续浏览后续教程,感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













