2017-04-03 4 views
5

ich den folgenden Code verwenden einen Datenrahmen aus einer Liste zu erstellen:Python: ein Pandas Datenrahmen aus einer Liste erstellen

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

Der obige Code funktioniert gut. Dann habe ich versucht, den gleichen Ansatz für eine andere Liste:

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

Aber es gab mir die folgenden Fehler diesmal:

--------------------------------------------------------------------------- 
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 

Warum sollte der gleiche Ansatz Arbeit für eine Liste, aber nicht eine andere? Irgendeine Idee, was hier falsch sein könnte? Danke vielmals!

Antwort

15

DataFrame.from_records behandelt String als Zeichenliste. Es benötigt also so viele Spalten wie die Länge der Zeichenfolge.

Sie könnten einfach DataFrame Konstruktor verwenden.

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 
Verwandte Themen