解决Pandas将不等长列表写入CSV时的数组长度不一致错误
解决列表长度不等时写入CSV的ValueError问题
pandas 创建 DataFrame 时要求所有列的元素数量必须一致,你的 VID 列表有4个元素,IMG 只有3个,因此触发 ValueError: All arrays must be of the same length 错误。以下是几种可行的解决方法:
方法1:用 itertools.zip_longest 对齐列表
利用 zip_longest 自动将短列表补全至最长列表的长度,默认用 NaN 填充空缺,也可指定自定义填充值:
import pandas as pd from itertools import zip_longest VID = ['00001', '05445', '987457', '15455'] IMG = ['00001', '05445', '987457'] # 默认用NaN填充空缺 df = pd.DataFrame(list(zip_longest(VID, IMG)), columns=['video', 'image']) # 若要指定填充值(比如空字符串),改为: # df = pd.DataFrame(list(zip_longest(VID, IMG, fillvalue='')), columns=['video', 'image']) df.to_csv("./file.csv", sep=',', index=False)
方法2:先创建单列DataFrame,再添加另一列
先基于长列表创建DataFrame,再添加短列表作为新列,pandas会自动用 NaN 补全空缺:
import pandas as pd VID = ['00001', '05445', '987457', '15455'] IMG = ['00001', '05445', '987457'] df = pd.DataFrame({"video": VID}) df["image"] = IMG # 长度不足时自动补NaN df.to_csv("./file.csv", sep=',', index=False)
方法3:手动补全短列表
计算两个列表的长度差,给短列表添加对应数量的填充值(比如空字符串、None),再创建DataFrame:
import pandas as pd VID = ['00001', '05445', '987457', '15455'] IMG = ['00001', '05445', '987457'] length_diff = len(VID) - len(IMG) if length_diff > 0: IMG += [''] * length_diff # 用空字符串填充,可替换为None或其他值 elif length_diff < 0: VID += [''] * (-length_diff) df = pd.DataFrame({"video": VID, "image": IMG}) df.to_csv("./file.csv", sep=',', index=False)
内容的提问来源于stack exchange,提问作者Beyond
相关产品推荐
相关产品推荐

