在pandas/python中,读取存储为字符串的数组

19 投票
4 回答
43638 浏览
提问于 2025-04-18 03:02

我有一个 pandas 数据框,其中有一列的每个元素都是一个字符串数组。

大概是这样的:

  col1 col2
0 120  ['abc', 'def']
1 130  ['ghi', 'klm']

当我用 to_csv 方法把它存成 CSV 文件时,看起来一切正常。

然后我用 from_csv 方法把它读回来,似乎也能读到。

但是当我分析每个单元格的值时,发现数组的内容是:

'[' ''' 'a' 'b' 'c' 之类的。

所以实际上它并没有把它当作数组来读取,而是把它当作一组字符串。有人能建议我怎么把这个字符串转换成数组吗?

我的意思是,这个数组是以字符串的形式存储的。

'[\'abc\',\'def\']'

4 个回答

0

也许可以试试用不同的分隔符?比如这样:

DataFrame.to_csv(filepath, sep=';')

然后用下面的方式读取:

DataFrame.from_csv(filepath, sep=';')
2

如果不使用pandas,可以通过使用ast模块里的literal_eval()来实现这个功能:

>>> data = "['abc', 'def']"
>>> import ast
>>> a_list = ast.literal_eval(data)
>>> type(a_list)
<class 'list'>
>>> a_list[0]
'abc'
6

没事,我明白了。

我只需要做这个:

arr = s[1:-1].split(',')

这样就去掉了方括号,还把字符串分割成了我想要的数组。

38

正如其他问题中提到的,你在这里应该使用 literal_eval

from ast import literal_eval
df['col2'] = df['col2'].apply(literal_eval)

下面是它的实际应用:

In [11]: df = pd.DataFrame([[120, '[\'abc\',\'def\']'], [130, '[\'ghi\',\'klm\']']], columns=['A', 'B'])

In [12]: df
Out[12]:
     A              B
0  120  ['abc','def']
1  130  ['ghi','klm']

In [13]: df.loc[0, 'B']  # a string
Out[13]: "['abc','def']"

In [14]: df.B = df.B.apply(literal_eval)

In [15]: df.loc[0, 'B']  # now it's a list
Out[15]: ['abc', 'def']

撰写回答