Python 将字符串的列转换为列表中的列
我的一个列在数据帧中的类型有问题。基本上,该列作为字符串保存在csv文件中,我想将其用作元组,以便能够将其转换为数字列表。下面是一个非常简单的csv:Python 将字符串的列转换为列表中的列,python,string,list,pandas,tuples,Python,String,List,Pandas,Tuples,我的一个列在数据帧中的类型有问题。基本上,该列作为字符串保存在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)" 如果使用函数“read_csv”加载它,我会得到一个字符串列表。我试图转换为列表,但得到了字符串的列表版本: df.LABELS.apply(lambda x: list(x)) 返回:
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)"
如果使用函数“read_csv”加载它,我会得到一个字符串列表。我试图转换为列表,但得到了字符串的列表版本:
df.LABELS.apply(lambda x: list(x))
返回:
['(','1','.','0',.,.,.,.,.,'4','.','0',')']
你知道怎么做吗
谢谢。您可以试试这个(假设您的csv
名为filename.csv
):
您可以使用
ast.literal\u eval
,它将为您提供一个元组:
import ast
df.LABELS = df.LABELS.apply(ast.literal_eval)
如果确实需要列表,请使用:
df.LABELS.apply(lambda s: list(ast.literal_eval(s)))
使用和:
但是如果这里没有NaN
s,那么列表理解也很有效:
df['LABELS'] = [x.strip('()').split(',') for x in df['LABELS']]
可选地,您可以考虑正则表达式:
pattern = re.compile("[0-9]\.[0-9]")
df.LABELS.apply(pattern.findall)
对不起,我参加晚会迟到了。因此,对于其他后来者,我根据上述回答得出以下结论:
df['hashtags'] = df.apply(lambda row: row['hashtags'].strip('[]').replace('"', '').replace(' ', '').split(',') , axis=1)
我加载了一个csv,其中的一些列如下所示…,['hashtag1','hashtag2'],。。。熊猫数据框将其作为字符串对象加载。我使用了上面的代码,并将其转换为列表。然后,我使用“explode”将数据展平。我会说这是3:-)中更快的解决方案
pattern = re.compile("[0-9]\.[0-9]")
df.LABELS.apply(pattern.findall)
df['hashtags'] = df.apply(lambda row: row['hashtags'].strip('[]').replace('"', '').replace(' ', '').split(',') , axis=1)