【问题标题】:Python converting a dataframe of string type list to listPython将字符串类型列表的数据框转换为列表
【发布时间】:2021-10-15 00:12:07
【问题描述】:

我有一个独特的情况。我从行格式的字段中获取数据。每行包含一个时间戳,一个值列表。它是字符串格式。我正在尝试将其转换为普通列表。

我的代码:

df=
     A
0    '1.2,1.3'
1    '2.2,2.3'   
2    '3.2,3.3,'
3    '4.2,4.3'
import ast
df['A'] = df['A'].applymap(ast.literal_eval).applymap(list)

目前的输出:

ValueError: malformed node or string: 
[3.2,3.3]

预期输出:

df=
     A
0    [1.2,1.3]
1    [2.2,2.3]   
2    [3.2,3.3]
3    [4.2,4.3]

【问题讨论】:

    标签: python pandas list dataframe


    【解决方案1】:

    试试:

    import ast
    
    df["A"] = df["A"].apply(lambda x: ast.literal_eval("[" + x + "]"))
    print(df)
    

    打印:

                A
    0  [1.2, 1.3]
    1  [2.2, 2.3]
    2  [3.2, 3.3]
    3  [4.2, 4.3]
    

    如果字符串中有'

    df["A"] = (
        df["A"].str.strip("'").apply(lambda x: ast.literal_eval("[" + x + "]"))
    )
    

    【讨论】:

    • 第一部分报错:ValueError: malformed node or string: timestamp 2019-02-05 10:52:33,第二部分报错:AttributeError: 'DataFrame' object has no attribute 'str'
    • @Mainland 你能用真实数据更新你的问题吗?看来,字符串不包含格式 xx.yy 的数字。
    • 数据太大了。我在这里举了一个例子。如何共享大数据?
    • @Mainland 没必要这么大。只是产生错误的样本。
    • @Mainland 你可以试试lambda x: ast.literal_eval("[" + x.strip(",") + "]")
    【解决方案2】:

    试试:

    df["A"].str.replace("'", "").str.rstrip(",").str.split(",").apply(lambda x : list(map(lambda y : float(y), x)))
    

    这会清理字符串的尾随逗号并将值转换为浮点数。

    【讨论】:

      【解决方案3】:

      一个选项可以是使用pandas.str.extractall 结合pd.to_numeric

      df.apply(
           lambda s: s.str.extractall(r'(\d+(?:\.\d+))').values.ravel(),axis=1)
        .apply(pd.Series)
        .apply(pd.to_numeric)
      
           0    1
      0  1.2  1.3
      1  2.2  2.3
      2  3.2  3.3
      3  4.2  4.3
      

      【讨论】:

        猜你喜欢
        • 2016-11-14
        • 2022-08-17
        • 1970-01-01
        • 1970-01-01
        • 2020-08-03
        • 2020-01-20
        • 2014-08-06
        • 1970-01-01
        • 2022-12-11
        相关资源
        最近更新 更多