Pandas DataFrame将列表存储为字符串:如何转换回列表?


问题内容

我有一个 n × m的 Pandas
DataFramedf定义如下。(我知道这不是最好的方法。这对于我在实际代码中尝试做的事情是有道理的,但这将是本文的TMI,所以请您相信我说这种方法在我的特定情况下有效)

>>> df = DataFrame(columns=['col1'])
>>> df.append(Series([None]), ignore_index=True)
>>> df
Empty DataFrame
Columns: [col1]
Index: []

我将列表存储在此DataFrame的单元格中,如下所示。

>>> df['column1'][0] = [1.23, 2.34]
>>> df
     col1
0  [1, 2]

由于某种原因,DataFrame将此列表存储为字符串而不是列表。

>>> df['column1'][0]
'[1.23, 2.34]'

我有两个问题要问你。

  1. 为什么DataFrame将列表存储为字符串,并且有解决此问题的方法?
  2. 如果没有,那么是否有Python方式将这个字符串转换为列表?

更新资料

我正在使用的DataFrame已保存并从CSV格式加载。 这种格式而不是DataFrame本身将列表从字符串转换为文字。


问题答案:

正如您所指出的那样,在将pandas DataFrames保存和加载为.csv文件时,通常会发生这种情况,这是一种文本格式。

在您的情况下,这是因为列表对象具有字符串表示形式,因此可以将它们存储为.csv文件。.csv然后加载将产生该字符串表示形式。

如果要存储实际对象,则应使用DataFrame.to_pickle()(注意:对象必须是可腌制的!)。

要回答第二个问题,您可以使用转换回ast.literal_eval

>>> from ast import literal_eval
>>> literal_eval('[1.23, 2.34]')
[1.23, 2.34]