将一列字符串转换为熊猫列表

Gui*_*oni 4 python string tuples list pandas

我在pandas数据框中的某个列的类型有问题。基本上,该列以字符串形式保存在csv文件中,我想将其用作元组,以便能够将其转换为数字列表。接下来是一个非常简单的csv:

ID,LABELS
1,"(1.0,2.0,2.0,3.0,3.0,1.0,4.0)"
2,"(1.0,2.0,2.0,3.0,3.0,1.0,4.0)"
Run Code Online (Sandbox Code Playgroud)

如果使用“ read_csv”函数加载它,则会得到字符串列表。我试图转换为列表,但是得到了字符串的列表版本:

df.LABELS.apply(lambda x: list(x))
Run Code Online (Sandbox Code Playgroud)

返回:

['(','1','.','0',.,.,.,.,.,'4','.','0',')']
Run Code Online (Sandbox Code Playgroud)

关于如何做到这一点的任何想法?

谢谢。

jez*_*ael 7

使用str.stripstr.split

df['LABELS'] = df['LABELS'].str.strip('()').str.split(',')
Run Code Online (Sandbox Code Playgroud)

但是,如果NaN这里不存在,也可以list comprehension很好地工作:

df['LABELS'] = [x.strip('()').split(',') for x in df['LABELS']]
Run Code Online (Sandbox Code Playgroud)

  • 我会说这是 3 个中更快的解决方案 :-) (2认同)

lll*_*lll 5

您可以使用ast.literal_eval,这将给您一个元组:

import ast
df.LABELS = df.LABELS.apply(ast.literal_eval)
Run Code Online (Sandbox Code Playgroud)

如果确实需要列表,请使用:

df.LABELS.apply(lambda s: list(ast.literal_eval(s)))
Run Code Online (Sandbox Code Playgroud)