如何将不同长度的列表作为行添加到pandas DataFrame中
报错原因
你代码中生成的pd.DataFrame(l1, columns=list(range(len(l1))))是3行1列的结构:列表的每个元素单独作为行存在,而df.loc[len(df)]是要往表中插入1行数据,二者形状不匹配,因此抛出ValueError。
解决方案
方案1:批量生成(推荐,适合大量列表场景)
先把所有待合并的列表汇总为一个嵌套列表,一次性生成DataFrame,自动适配最长列表的长度生成数字列名,短列表缺失位置自动填充NaN:
import pandas as pd all_lists = [ [1,2,3], [10,22,13,4], [2] ] # 动态生成列名,列数等于最长列表的长度 max_length = max(len(i) for i in all_lists) col_names = list(range(max_length)) df = pd.DataFrame(all_lists, columns=col_names)
生成的df结构如下:
| 0 | 1 | 2 | 3 |
|---|---|---|---|
| 1 | 2 | 3 | NaN |
| 10 | 22 | 13 | 4 |
| 2 | NaN | NaN | NaN |
方案2:逐行添加(适合流式获取列表的场景)
如果无法提前收集全所有列表,需要逐行插入,用concat实现自动列扩展:
import pandas as pd df = pd.DataFrame() # 示例逐个传入列表 for lst in [[1,2,3], [10,22,13,4], [2]]: row = pd.Series(lst, index=range(len(lst))) df = pd.concat([df, row.to_frame().T], ignore_index=True) # 统一转换列名为整数类型 df.columns = df.columns.astype(int)
内容的提问来源于stack exchange,提问作者nicomp
相关产品推荐
相关产品推荐

