2017-02-11 143 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