python - 将 python 列表转换为数据帧时,ValueError : 4 columns passed, 传递的数据有 3 列。如果3通过了如何添加空白值?

标签 python pandas dataframe

我有一个名为“data”的列表,通常包含包含 3 个字段的列表,但有时也可以包含 4 个:

[['Bob', 'DeVito', '100 Lbs'], ['Mac', 'Charles', '150 Lbs']]

如果我尝试将数据转换为至少一个列表有 4 个元素的数据框,它将运行良好:

df = pd.DataFrame(data, columns=['First', 'Last', 'Weight', 'Height'])

但是如果我针对上面看到的列表运行它,它会崩溃说

ValueError: 4 columns passed, passed data had 3 columns

当我给它一个没有第四列的列表列表时,如何才能将其转换为高度列为空白值的 df 而不会崩溃?这样,转换将在仅包含 len 3 elems、len 4 elems 或两者组合的列表上运行。

期望的结果:

First   Last    Weight  Height
  Bob DeVito   100 Lbs    None
  Mac  Charles 150 Lbs    None

最佳答案

这应该可以解决您的问题。首先,它在 try/except 循环中从列表元素创建一个字典,这样如果没有高度值,它不会抛出错误,而是放入 np.nan 。最后,它从字典创建 pandas 数据框。

import pandas as pd
import numpy as np

list = [['Bob', 'DeVito', '100 Lbs'], ['Mac', 'Charles', '150 Lbs']]
dict = {}
try:
    dict = [{ "First":a[0], "Last":a[1], "Weight":a[2], "Height": a[3]} for a in list]
except:
    dict = [{"First": a[0], "Last": a[1], "Weight": a[2], "Height": np.nan} for a in list]

print(dict)

df = pd.DataFrame(dict)
print(df)

Output :
   First     Last   Weight  Height
0   Bob   DeVito  100 Lbs     NaN
1   Mac  Charles  150 Lbs     NaN

关于python - 将 python 列表转换为数据帧时,ValueError : 4 columns passed, 传递的数据有 3 列。如果3通过了如何添加空白值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63272148/

相关文章:

python - 如何删除3列以上具有相同值的行

r - 如何计算R中所有列中不为零的特征的百分比?

python - 为什么我无法在 Python 脚本中导入模块,但可以在 REPL 中导入它?

python - 用户信息未保存

python - vscode python 无法递归发现单元测试

python - 使用 groupby 获取组中具有最大值的行

python - 具有指定(附加)列的 Pandas 数据透视

django - Django中的 Pandas to_sql

python - 为什么随机森林需要更长的时间来拟合具有虚拟变量的数据框?

python - 如何更改 iterrows() 的起始索引?