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

AMM*_*AMM 8 python csv arrays dataframe pandas

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

所以这样的事情.

  col1 col2
0 120  ['abc', 'def']
1 130  ['ghi', 'klm']
Run Code Online (Sandbox Code Playgroud)

现在,当我使用to_csv将其存储到csv时似乎很好.当我使用from_csv读回来时,我似乎回过头来看了.但是当我分析数组中每个单元格的值时

'[''''''''b''''等等.所以基本上它不是作为一个数组而是一组字符串读取它.有人可以建议我如何将这个字符串转换成数组吗?

我的意思是说数组已经像字符串一样存储了

'[\'abc\',\'def\']'
Run Code Online (Sandbox Code Playgroud)

And*_*den 21

如其他问题所述,您应该literal_eval在这里使用:

from ast import literal_eval
df['col2'] = df['col2'].apply(literal_eval)
Run Code Online (Sandbox Code Playgroud)

在行动:

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


AMM*_*AMM 6

没关系得到它。

我所要做的就是

arr = s[1:-1].split(',')
Run Code Online (Sandbox Code Playgroud)

这摆脱了方括号,并将字符串拆分为我想要的数组。