【问题标题】:ValueError: 4 columns passed, passed data had 3 columns when converting python list to dataframe. How to add blank values if 3 passed?ValueError: 4 列通过,将 python 列表转换为数据框时传递的数据有 3 列。如果 3 通过,如何添加空白值?
【发布时间】:2020-08-06 04:01:12
【问题描述】:

我有一个名为“数据”的列表,该列表通常包含 3 个字段,但有时可能有 4 个:

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

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

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

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

ValueError:传递了 4 列,传递的数据有 3 列

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

想要的结果:

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

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    这应该可以解决您的问题。首先,它在 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
    

    【讨论】:

    • 谢谢!我最终尝试了一下,但没有字典。它尝试了两种单独的数据帧转换,一种有 3 个字段,另一种有 4 个 :) 仍然很笨重,但它可以工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多