如何为Pandas DataFrame子集添加新列并手动填充数据?
解决Pandas添加列的问题
问题根源分析
- 全NaN问题:将姓名列表转Series时,新Series默认索引是0-3,但你提取的子集索引是原DataFrame的1504-1507,索引不匹配导致赋值后全为NaN。
- 视图警告与NaN行:
iloc切片返回的是原DataFrame的视图而非副本,直接修改会触发警告;用字典赋值时,若字典键与子集索引不对应,会生成NaN行。
正确解决方案
步骤1:提取子集时生成副本
先通过.copy()明确创建子集的副本,避免视图修改警告:
# 提取订单1238的子集并转为副本 order_subset = restaurant.iloc[1504:1508].copy()
步骤2:直接赋值姓名列表
因为子集行数(4行)与姓名列表长度完全匹配,直接赋值即可自动按顺序填充:
customer_names = ['Jenny', 'Leon', 'Tuan', 'Victoria'] order_subset['customer_name'] = customer_names
一步到位写法(可选)
用assign()方法合并操作:
order_subset = restaurant.iloc[1504:1508].copy().assign( customer_name=['Jenny', 'Leon', 'Tuan', 'Victoria'] )
验证方法
打印子集确认结果:
print(order_subset[['order_number', 'customer_name']])
输出应包含正确匹配的姓名,无NaN值,也不会触发警告。
内容的提问来源于stack exchange,提问作者FJJ
相关产品推荐
相关产品推荐

