【问题标题】:Pandas is importing a column with square brackets as a string instead of listPandas 将带有方括号的列作为字符串而不是列表导入
【发布时间】:2021-07-21 06:45:56
【问题描述】:

使用pd.read_csv 我正在导入一个数据框。其中一列包含字符串列表。例如:

>>> df['topic'].head(5)
0    ['ECONOMIC PERFORMANCE', 'ECONOMICS', 'EQUITY ...
1    ['CAPACITY/FACILITIES', 'CORPORATE/INDUSTRIAL']
2    ['PERFORMANCE', 'ACCOUNTS/EARNINGS', 'CORPORAT...
3    ['PERFORMANCE', 'ACCOUNTS/EARNINGS', 'CORPORAT...
4    ['STRATEGY/PLANS', 'NEW PRODUCTS/SERVICES', 'C...
Name: topic, dtype: object

虽然此列应该是列表,但 pandas 将其作为字符串导入。如何让 pandas 将其作为列表列导入?

【问题讨论】:

    标签: python pandas list dataframe


    【解决方案1】:

    您可以使用 ast.literal_eval 将带有字符串的列转换为 Python 列表。例如:

    from ast import literal_eval
    
    df["topic"] = df["topic"].apply(literal_eval)
    print(df)
    

    打印:

                                             topic
    0    [ECONOMIC PERFORMANCE, ECONOMICS, EQUITY]
    1  [CAPACITY/FACILITIES, CORPORATE/INDUSTRIAL]
    2  [PERFORMANCE, ACCOUNTS/EARNINGS, CORPORATE]
    3  [PERFORMANCE, ACCOUNTS/EARNINGS, CORPORATE]
    4      [STRATEGY/PLANS, NEW PRODUCTS/SERVICES]
    

    【讨论】:

    • 我希望避免使用 apply,因为这是一个很大的列表。但我认为,如果一切都失败了,那会很好。
    • @Andrej Kesely 这是否意味着内置的 Python eval() 不起作用?如果不是,为什么?
    • @jch eval() 也可以工作,但不安全——它可以执行任意代码,但ast.literal_eval 将只解析字面结构,例如整数、字符串、列表...跨度>
    猜你喜欢
    • 2022-12-10
    • 2012-10-28
    • 2021-03-09
    • 1970-01-01
    • 2012-01-28
    • 2018-07-21
    • 2014-06-04
    相关资源
    最近更新 更多