从字符串列表中创建熊猫数据框
问题描述:
我有这个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
+0
谢谢,@AChampion – user308827
谢谢,这是一个很好的答案 – user308827