2017-04-03 40 views
5

używam następujący kod, aby utworzyć ramkę danych z listy:Python: stworzyć ramkę danych pandy z listy

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

Powyższy kod działa poprawnie. Potem próbowałem to samo podejście do innej listy:

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

Ale dał mi następujące błędy ten czas:

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

Dlaczego ta sama praca podejście do jednej listy, ale nie inna? Masz pojęcie, co tu może być nie tak? Wielkie dzięki!

Odpowiedz

15

DataFrame.from_records traktuje ciąg jako listę znaków. więc potrzebuje tyle kolumn co długość ciągu znaków.

Można po prostu użyć konstruktora DataFrame.

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