2017-02-11 7 views

ответ

5

Вы можете использовать io.StringIO кормить строку в read_csv:

In [23]: pd.read_csv(io.StringIO('\n'.join(list_vals)), delim_whitespace=True) 
Out[23]: 
    col_a col_B col_C 
0 12.0 34.0 10.0 
1 15.0 111.0 23.0 

Это имеет то преимущество, что оно автоматически интерпретирует тип ция, что панды будут делать, если вы читаете обычным csv-- столбцы поплавки:

In [24]: _.dtypes 
Out[24]: 
col_a float64 
col_B float64 
col_C float64 
dtype: object 

В то время как вы могли бы просто накормить свой список в конструктор DataFrame непосредственно, все останется строка:

In [21]: pd.DataFrame(columns=list_vals[0].split(), 
         data=[row.split() for row in list_vals[1:]]) 
Out[21]: 
    col_a col_B col_C 
0 12.0 34.0 10.0 
1 15.0 111.0 23 

In [22]: _.dtypes 
Out[22]: 
col_a object 
col_B object 
col_C object 
dtype: object 

Мы могли бы добавить dtype=float, чтобы исправить это, конечно, но мы могли бы иметь смешанные типы, с которыми подход read_csv будет обрабатываться обычным способом, и здесь мы должны будем сделать это вручную.

+0

спасибо, это отличный ответ – user308827

1

Вы можете сделать это путем преобразования ваших данных Сыроватского, например:

>>> pd.DataFrame({a: b for a, *b in (zip(*map(str.split, list_vals)))}) 
    col_B col_C col_a 
0 34.0 10.0 12.0 
1 111.0 23 15.0 

Или с оригинальным заказ:

>>> pd.DataFrame({a: b for a, *b in (zip(*map(str.split, list_vals)))}, 
...    columns=list_vals[0].split()) 
    col_a col_B col_C 
0 12.0 34.0 10.0 
1 15.0 111.0 23 
+0

спасибо, @AChampion – user308827