【问题标题】:Python: create a pandas data frame from a listPython:从列表中创建熊猫数据框
【发布时间】:2017-08-27 18:34:16
【问题描述】:

我正在使用以下代码从列表中创建数据框:

test_list = ['a','b','c','d']
df_test = pd.DataFrame.from_records(test_list, columns=['my_letters'])
df_test

上面的代码工作正常。然后我对另一个列表尝试了相同的方法:

import pandas as pd
q_list = ['112354401', '116115526', '114909312', '122425491', '131957025', '111373473']
df1 = pd.DataFrame.from_records(q_list, columns=['q_data'])
df1

但这次却给了我以下错误:

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-24-99e7b8e32a52> in <module>()
      1 import pandas as pd
      2 q_list = ['112354401', '116115526', '114909312', '122425491', '131957025', '111373473']
----> 3 df1 = pd.DataFrame.from_records(q_list, columns=['q_data'])
      4 df1

/usr/local/lib/python3.4/dist-packages/pandas/core/frame.py in from_records(cls, data, index, exclude, columns, coerce_float, nrows)
   1021         else:
   1022             arrays, arr_columns = _to_arrays(data, columns,
-> 1023                                              coerce_float=coerce_float)
   1024 
   1025             arr_columns = _ensure_index(arr_columns)

/usr/local/lib/python3.4/dist-packages/pandas/core/frame.py in _to_arrays(data, columns, coerce_float, dtype)
   5550         data = lmap(tuple, data)
   5551         return _list_to_arrays(data, columns, coerce_float=coerce_float,
-> 5552                                dtype=dtype)
   5553 
   5554 

/usr/local/lib/python3.4/dist-packages/pandas/core/frame.py in _list_to_arrays(data, columns, coerce_float, dtype)
   5607         content = list(lib.to_object_array(data).T)
   5608     return _convert_object_array(content, columns, dtype=dtype,
-> 5609                                  coerce_float=coerce_float)
   5610 
   5611 

/usr/local/lib/python3.4/dist-packages/pandas/core/frame.py in _convert_object_array(content, columns, coerce_float, dtype)
   5666             # caller's responsibility to check for this...
   5667             raise AssertionError('%d columns passed, passed data had %s '
-> 5668                                  'columns' % (len(columns), len(content)))
   5669 
   5670     # provide soft conversion of object dtypes

AssertionError: 1 columns passed, passed data had 9 columns

为什么相同的方法适用于一个列表而不适用于另一个?知道这里可能有什么问题吗?非常感谢!

【问题讨论】:

    标签: list python-3.x pandas dataframe


    【解决方案1】:

    如果你想从多个列表创建一个 DataFrame,你可以简单地压缩列表。这将返回一个“zip”对象。所以你转换回一个列表。

    mydf = pd.DataFrame(list(zip(lstA, lstB)), columns = ['My List A', 'My List B'])
    

    【讨论】:

    • 我猜这种方式是最常用的
    【解决方案2】:

    DataFrame.from_records 将字符串视为字符列表。所以它需要与字符串长度一样多的列。

    您可以简单地使用the DataFrame constructor

    In [3]: pd.DataFrame(q_list, columns=['q_data'])
    Out[3]:
          q_data
    0  112354401
    1  116115526
    2  114909312
    3  122425491
    4  131957025
    5  111373473
    

    【讨论】:

      【解决方案3】:
      In[20]: test_list = [['a','b','c'], ['AA','BB','CC']]
      
      In[21]: pd.DataFrame(test_list, columns=['col_A', 'col_B', 'col_C'])
      Out[21]: 
        col_A col_B col_C
      0     a     b     c
      1    AA    BB    CC
      
      In[22]: pd.DataFrame(test_list, index=['col_low', 'col_up']).T
      Out[22]: 
        col_low col_up
      0       a     AA
      1       b     BB
      2       c     CC
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-14
        • 2020-08-14
        • 2021-06-08
        • 2021-09-29
        • 2020-12-20
        • 1970-01-01
        • 1970-01-01
        • 2020-09-21
        相关资源
        最近更新 更多