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
相关产品推荐
相关产品推荐

