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

Posted

技术标签:

【中文标题】将一列字符串转换为熊猫列表【英文标题】:Convert a columns of string to list in pandas 【发布时间】:2018-10-21 01:02:18 【问题描述】:

我对 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)"

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

df.LABELS.apply(lambda x: list(x))

返回:

['(','1','.','0',.,.,.,.,.,'4','.','0',')']

你知道怎么做吗?

谢谢。

【问题讨论】:

【参考方案1】:

你可以试试这个(假设你的csv 被称为filename.csv):

df = pd.read_csv('filename.csv')

df['LABELS'] = df.LABELS.apply(lambda x: x.strip('()').split(','))

>>> df
   ID                               LABELS
0   1  [1.0, 2.0, 2.0, 3.0, 3.0, 1.0, 4.0]
1   2  [1.0, 2.0, 2.0, 3.0, 3.0, 1.0, 4.0]

【讨论】:

【参考方案2】:

你可以使用ast.literal_eval,它会给你一个元组:

import ast
df.LABELS = df.LABELS.apply(ast.literal_eval)

如果您确实想要一个列表,请使用:

df.LABELS.apply(lambda s: list(ast.literal_eval(s)))

【讨论】:

【参考方案3】:

使用str.stripstr.split

df['LABELS'] = df['LABELS'].str.strip('()').str.split(',')

但如果这里没有NaNs,list comprehension 也可以正常工作:

df['LABELS'] = [x.strip('()').split(',') for x in df['LABELS']]

【讨论】:

我会说这是 3 中更快的解决方案 :-)【参考方案4】:

或者,您可以考虑使用正则表达式:

pattern = re.compile("[0-9]\.[0-9]")
df.LABELS.apply(pattern.findall)

【讨论】:

【参考方案5】:

对不起,我迟到了。因此,对于其他后来者,我根据上述回复完成了这项工作:

df['hashtags'] = df.apply(lambda row:  row['hashtags'].strip('[]').replace('"', '').replace(' ', '').split(',')   , axis=1)

我加载了一个 csv,其中包含一些看起来像这样的列 ...,['hashtag1','hashtag2'],... 并且 Panda DataFrame 将其作为字符串对象加载。我使用了上面的代码并将其转换为列表。然后我使用“explode”来展平数据。

【讨论】:

以上是关于将一列字符串转换为熊猫列表的主要内容,如果未能解决你的问题,请参考以下文章

将一列日期数字转换为缩写月份

VBA 如何将一列字符转成日期

有没有更快的方法将一列 pyspark 数据框转换为 python 列表? (Collect() 非常慢)

如何将熊猫中的一列列表转换为Python中唯一值的稀疏DataFrame [重复]

如何在python中将文本字符串列表转换为熊猫数据框?

如何将熊猫中的timedelta列转换为字符串