我有這個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())
有沒有一種方法來填充數據幀的休息嗎?
我有這個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())
有沒有一種方法來填充數據幀的休息嗎?
你可以使用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
方法會按照通常的方式處理,這裏我們必須手動完成。
可以通過轉換爲數據做與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
謝謝,@AChampion – user308827
謝謝,這是一個很好的答案 – user308827