Pandas修改PM2.5列指定行数据时新增行的解决方法
解决Pandas中使用df.at修改数据时新增行的问题
问题根源
你遇到的新增行问题,本质是索引类型不匹配:你的DataFrame行索引是整数类型的0,但你用了字符串'0'去定位行——Pandas会把字符串索引和整数索引当成完全不同的索引值,所以自然就新建了一行而不是修改原有行。
快速修复:修改原有行的正确方式
直接用整数索引来定位第一行就行:
df.at[0, 'PM2.5'] = 10
如果不确定自己的索引类型,可以先跑print(df.index.dtype)验证:如果输出是int64,就用整数索引;如果是object(字符串类型),那用'0'才有效。
手动为18行PM2.5列添加数据的方法
根据你的需求,这里提供几种实用的操作方式:
1. 给连续的18行(比如索引0到17)依次赋值不同值
如果你有一个包含18个数值的列表,可以用循环逐个赋值:
# 示例:替换成你实际需要的18个数值 pm25_values = [10, 12, 15, 8, 20, 17, 9, 13, 11, 14, 16, 7, 19, 22, 25, 18, 21, 23] for idx in range(18): df.at[idx, 'PM2.5'] = pm25_values[idx]
2. 给18行设置同一个固定值
如果这18行的PM2.5值都一样,用切片批量赋值更高效:
# 假设目标是索引0到17的18行,根据你的实际行索引调整范围 df.loc[0:17, 'PM2.5'] = 15
3. 给不连续的特定18行赋值
如果需要修改的18行索引不是连续的,先把目标行索引放进列表,再批量赋值:
# 替换成你需要修改的18个行索引 target_indices = [0, 2, 5, 7, ...] # 对应每个索引的数值列表,长度要和target_indices一致 values = [10, 12, 15, 8, ...] df.loc[target_indices, 'PM2.5'] = values
额外提示
如果你的行索引不是从0开始(比如从1开始),记得把代码里的索引值对应调整,比如第一行索引是1的话,修改第一行就用df.at[1, 'PM2.5'] = 10。
内容的提问来源于stack exchange,提问作者Hassan
相关产品推荐
相关产品推荐

