2017-02-11 148 views
1

我有这个foll。列表:从字符串列表中创建熊猫数据框

list_vals = ['col_a col_B col_C', '12.0 34.0 10.0', '15.0 111.0 23'] 

如何将它转换为熊猫数据框?

我可以这样开始:

df = pd.DataFrame(columns=list_vals[0].split()) 

有没有一种方法来填充数据帧的休息吗?

回答

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 

虽然你可能只给你的名单分成数据帧直接构造,一切都将留字符串:

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

可以通过转换为数据做与dict,如:

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