【问题标题】:ValueError: 2 columns passed, passed data had 1 columnsValueError:通过了 2 列,传递的数据有 1 列
【发布时间】:2020-03-19 06:14:59
【问题描述】:

我有一个这样的组织名称列表:

name = ['ALPHABET INC', 'AMAZON COM INC', 'APPLE INC',....]

还有一个像这样的 cu 值列表:

cu = ['02079K305', '023135106', '037833100',....]

当我尝试将其转换为数据框时,它给了我错误消息,“ValueError: 2 columns pass, passed data has 1 columns”

我的转换列表和数据框的代码:

df = pd.DataFrame([name, cu], columns=['name of issuer', 'cusip'])

我哪里出错了? 提前致谢!

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    使用zip

    pd.DataFrame(zip(name, cu), columns=['name of issuer', 'cusip'])
    

    例如:

    >>> df = pd.DataFrame(zip(name, cu), columns=['name of issuer', 'cusip'])
    >>> df
       name of issuer      cusip
    0    ALPHABET INC  02079K305
    1  AMAZON COM INC  023135106
    2       APPLE INC  037833100
    

    【讨论】:

    • 不要盲目使用zip,长度不等会静默截断。
    【解决方案2】:

    我认为最简单的就是创建字典:

    df = pd.DataFrame({'name of issuer': name, 'cusip':cu})  
    

    您的解决方案可以使用zip,在最新版本的熊猫中应该省略list

    df = pd.DataFrame(list(zip(name, cu)), columns=['name of issuer', 'cusip'])
    

    print (df)
       name of issuer      cusip
    0    ALPHABET INC  02079K305
    1  AMAZON COM INC  023135106
    2       APPLE INC  037833100
    

    【讨论】:

      【解决方案3】:

      现在,panda 认为你传递的值是一个很大的列表。改变这种情况的一种方法是将字典作为数据传递,其中列名作为键,列表作为值。

      df = pd.DataFrame({'name of issuer' : name, 'cusip' : cu})

      【讨论】:

        【解决方案4】:

        您的列表结构将数据放入行而不是列中。

        df = pd.DataFrame([name, cu]).T
        df.columns = ['name of issuer', 'cusip']
        
        >>> df
           name of issuer      cusip
        0    ALPHABET INC  02079K305
        1  AMAZON COM INC  023135106
        2       APPLE INC  037833100
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-20
          • 1970-01-01
          • 2014-07-31
          • 1970-01-01
          • 2019-01-15
          相关资源
          最近更新 更多