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

时间:2014-04-16 20:26:54

标签: python arrays csv pandas dataframe

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

这样的事情。

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

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

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

我的意思是说数组已经存储为字符串

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

4 个答案:

答案 0 :(得分:19)

正如其他问题中所述,您应该在此使用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']

答案 1 :(得分:4)

没关系得到它。

我所要做的只是

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

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

答案 2 :(得分:1)

没有大熊猫,这是使用ast模块进行此操作的一种方法。 literal_eval()

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

答案 3 :(得分:0)

也许尝试使用不同的分隔符值?像这样:

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

然后阅读

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