【问题标题】: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',')']

你知道怎么做吗?

谢谢。

【问题讨论】:

    标签: python string list pandas tuples


    【解决方案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”来展平数据。

          【讨论】:

            猜你喜欢
            • 2021-04-17
            • 2017-09-17
            • 2020-03-22
            • 2018-11-01
            • 2017-04-08
            • 2020-04-04
            • 1970-01-01
            • 2017-07-29
            • 1970-01-01
            相关资源
            最近更新 更多