如何从不同长度列表生成带NaN填充的pd.DataFrame?
解决不同长度列表转对齐DataFrame的方法
这问题我日常处理数据时碰到过好多次,其实有几种简洁的实现方式,给你分享三个常用的:
方法1:利用pd.DataFrame.from_dict自动补全
Pandas的from_dict方法配合orient='index'可以自动把不同长度的列表转成对齐的列,短列表末尾会自动填充NaN:
import pandas as pd a = [1,2,3] b = [2,3] # 用字典传入数据,转置后得到目标结构 df = pd.DataFrame.from_dict({'a': a, 'b': b}, orient='index').T
方法2:转成Series后合并(最直观)
把每个列表单独转成pd.Series,然后用pd.concat按列合并,Series会自动补全NaN到最长长度:
import pandas as pd a = [1,2,3] b = [2,3] # 给每个Series指定列名 s_a = pd.Series(a, name='a') s_b = pd.Series(b, name='b') # 按列合并 df = pd.concat([s_a, s_b], axis=1)
我个人最常用这个方法,逻辑清晰,后续要加更多列表也很方便。
方法3:手动补全列表长度(自定义性强)
如果需要手动控制填充值(比如不用NaN而是其他默认值),可以先计算最长列表的长度,再给短列表补全:
import pandas as pd a = [1,2,3] b = [2,3] # 获取最长列表的长度 max_length = max(len(a), len(b)) # 给短列表补全到最长长度,这里用pd.NA(和NaN等价但更规范) a_padded = a + [pd.NA] * (max_length - len(a)) b_padded = b + [pd.NA] * (max_length - len(b)) # 创建DataFrame df = pd.DataFrame({'a': a_padded, 'b': b_padded})
执行后得到的结果就是你想要的对齐结构:
a b 0 1 2.0 1 2 3.0 2 3 NaN
内容的提问来源于stack exchange,提问作者Garvey
相关产品推荐
相关产品推荐

