【问题标题】:I need to extract string from a text in dataframe in pythone我需要从python数据框中的文本中提取字符串
【发布时间】:2021-02-07 20:57:19
【问题描述】:

我的数据框包含如下列,其中包含 4000 行,我需要提取一个字符串,例如:

动作-冒险-奇幻-科幻

来自下文

'[{"id": 28, "name": "Action"}, {"id": 12, "name": "Adventure"}, {"id": 14, "name": "Fantasy"}, {"id": 878, "name": "Science Fiction"}]'

【问题讨论】:

  • 这是 JSON。您最初是如何创建 DataFrame 的?您始终可以处理该列并解析 JSON,但我想您在首先创建 df 时可能会做一些不同的事情。另外,您最好显示minimal reproducible example,即包括。示例数据框。
  • 我有一个 .CSV 文件,其中包含有关电影的数据我有一个列,就像我在上面上传的一样。我需要从这个文本格式中提取电影的流派,并使用有用的流派创建新行只有
  • 正是我的意思 - 你有一个 csv 文件,并且你以一种导致列中有一些 json 的方式创建数据框。 csv来自哪里/如何创建,csv文件的格式是什么?
  • 这是一个普通的csv文件,但是有一个三列格式相同的“json”

标签: python string


【解决方案1】:

根据您的问题,您的数据框中似乎每行都有这个字符串/dict嵌入数据列表。

我编写了一个可能有帮助的示例:

import pandas as pd
import json
df = pd.DataFrame(['[{"id": 28, "name": "Action"}, {"id": 12, "name": "Adventure"}, {"id": 14, "name": "Fantasy"}, {"id": 878, "name": "Science Fiction"}]'], columns=['x'])

我制作了一个自定义函数来应用到每一行数据。它可能不是最优雅的,但希望它很容易理解。

def collect_names(data_dict):
    name_list = [dic["name"] for dic in data_dict]
    return '-'.join(name_list)

最后,

df["names"] = df['x'].apply(lambda row: collect_names(json.loads(row)))

返回...数据框中每行的“动作冒险奇幻科幻小说”。

【讨论】:

    【解决方案2】:

    这是 JSON 而不是数据框。使用json 模块:

    import json
    s = '[{"id": 28, "name": "Action"}, {"id": 12, "name": "Adventure"}, {"id": 14, "name": "Fantasy"}, {"id": 878, "name": "Science Fiction"}]'
    '-'.join(d['name'] for d in json.loads(s))
    
    #evaluates to 'Action-Adventure-Fantasy-Science Fiction'
    

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多