从字符串列表创建pandas数据帧

use*_*827 4 python pandas

我有这个人.列表:

list_vals = ['col_a col_B col_C', '12.0 34.0 10.0', '15.0 111.0 23']
Run Code Online (Sandbox Code Playgroud)

如何将其转换为pandas数据帧?

我可以这样开头:

df = pd.DataFrame(columns=list_vals[0].split())
Run Code Online (Sandbox Code Playgroud)

有没有办法填充其余的数据帧?

DSM*_*DSM 10

您可以使用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
Run Code Online (Sandbox Code Playgroud)

这样做的好处是它会自动执行pandas在读取普通csv时会执行的类型解释 - 列是浮点数:

In [24]: _.dtypes
Out[24]: 
col_a    float64
col_B    float64
col_C    float64
dtype: object
Run Code Online (Sandbox Code Playgroud)

虽然您可以直接将列表提供给DataFrame构造函数,但所有内容都会保留字符串:

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
Run Code Online (Sandbox Code Playgroud)

dtype=float当然,我们可以添加修复它,但我们可能有混合类型,这种read_csv方法可以通常的方式处理,这里我们必须手动完成.