2017-02-11 21 views
1

私はフォールを持っています。リスト:ストリングのリストからパンダのデータフレームを作成する

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

どのように私はそれをpandasデータフレームに変換できますか?

私はこのように起動することができます。

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

は、データフレームの残りの部分を移入する方法はありますか?

答えて

5

あなたはread_csvに文字列を養うためにio.StringIOを使用することができます。

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--普通に読んでいた場合パンダはどうなるationが山車です:

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

あなたは例えば、辞書にあなたのデータに変換することによってそれを行うことができます。

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

関連する問題