如何创建包含空列与已填充列的DataFrame?解决字典转DataFrame时的长度不匹配报错问题
解决pandas创建DataFrame时数组长度不一致自动填充NaN的问题
你遇到的ValueError: arrays must all be same length报错很常见——pandas默认要求字典里所有列表的长度必须一致,但你的字典里lat lng:、place_id、type都是空列表(长度0),和其他长度为3的列表不匹配。下面给你几种简单的方法,让pandas自动用NaN填充这些空列:
方法1:用pd.DataFrame.from_dict指定orient='index'
这个方法会先把字典按行(索引)处理,再转置成列,自动为长度不足的列补NaN,代码非常简洁:
import pandas as pd data = {'name':['a', 'b', 'c'], 'geojson':['val1', 'val2', 'val3'], 'lat lng':[], 'place_id':[], 'type':[], 'hierarchia':[1, 1, 1]} df = pd.DataFrame.from_dict(data, orient='index').T print(df)
输出结果:
name geojson lat lng place_id type hierarchia 0 a val1 NaN NaN NaN 1 1 b val2 NaN NaN NaN 1 2 c val3 NaN NaN NaN 1
方法2:手动统一所有列表的长度
如果你需要自定义填充值(比如用空字符串代替NaN),可以先找到字典中最长列表的长度,再把所有短列表(包括空列表)补到对应长度:
import pandas as pd import numpy as np data = {'name':['a', 'b', 'c'], 'geojson':['val1', 'val2', 'val3'], 'lat lng':[], 'place_id':[], 'type':[], 'hierarchia':[1, 1, 1]} # 获取最长列表的长度 max_len = max(len(v) for v in data.values()) # 统一每个列表的长度,用NaN填充不足部分 for key in data: if len(data[key]) < max_len: data[key] += [np.nan] * (max_len - len(data[key])) df = pd.DataFrame(data) print(df)
方法3:用pd.Series构造每一列
把字典里的每个值转换成pd.Series,pandas会自动对齐索引,不足的部分自动补NaN:
import pandas as pd data = {'name':['a', 'b', 'c'], 'geojson':['val1', 'val2', 'val3'], 'lat lng':[], 'place_id':[], 'type':[], 'hierarchia':[1, 1, 1]} # 逐个将字典值转为Series,再构造DataFrame df = pd.DataFrame({k: pd.Series(v) for k, v in data.items()}) print(df)
这三种方法都能完美解决你的问题,你可以根据自己的需求选一种就行~
内容的提问来源于stack exchange,提问作者adamDud
相关产品推荐
相关产品推荐

