You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas中如何通过循环为多个指定列填充对应行数据?

问题原因

直接向append()传入一维列表时,pandas会将列表内的每个元素识别为独立的单行记录,每条记录仅1个值,找不到匹配列时会自动创建新列(即输出中的0列),因此出现原有三列全为NaN、额外生成多余列和行的问题。

解决方案

方法1:使用loc直接赋值(最简单,兼容全版本pandas)

直接通过行索引定位到待新增的行位置,赋值即可自动匹配列顺序:

import pandas as pd
import numpy as np

column_names = [str(x) for x in range(1,4)]
df = pd.DataFrame(columns = column_names)

new_row = []
for i in range(3):
    new_row.append(i)

# len(df)就是待新增行的索引,直接赋值即可
df.loc[len(df)] = new_row

print(df)

运行输出:

1  2  3
0  0  1  2

方法2:使用pd.concat(pandas 2.0+推荐,已弃用append的版本适用)

将新增行转为符合列规则的DataFrame后拼接:

import pandas as pd
import numpy as np

column_names = [str(x) for x in range(1,4)]
df = pd.DataFrame(columns = column_names)

new_row = []
for i in range(3):
    new_row.append(i)

# 转成单行DataFrame,指定列名和原df一致
new_df = pd.DataFrame([new_row], columns=df.columns)
df = pd.concat([df, new_df], ignore_index=True)

print(df)

方法3:适配append的写法(仅兼容pandas 1.x版本)

将列表转为指定index的Series,匹配原df的列名后再追加:

import pandas as pd
import numpy as np

column_names = [str(x) for x in range(1,4)]
df = pd.DataFrame(columns = column_names)

new_row = []
for i in range(3):
    new_row.append(i)

# 转Series,index指定为原df的列名
new_series = pd.Series(new_row, index=df.columns)
df = df.append(new_series, ignore_index=True)

print(df)

如果需要给整列批量赋值,比如列1全为0、列2全为1、列3全为2,可以直接遍历列赋值:

# 假设要给每列填充10行对应值
row_count = 10
for idx, col_name in enumerate(df.columns):
    df[col_name] = [idx]*row_count

内容的提问来源于stack exchange,提问作者yodoro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:30:01