gpt4 book ai didi

python - 有没有办法在 Pandas 中自定义清理一行?

转载 作者:行者123 更新时间:2023-12-02 16:10:49 25 4
gpt4 key购买 nike

我是 Pandas 的新手,我正在尝试使用它来清理由索引、艺术品标题和艺术品维度组成的数据库。

我有的是:

db1 = {'title' : ['121 art1 magic world 100x82 2000.jpg', '383 art2 fantastic comic 61x61 2017.jpg']}

我需要的是

db2 = {'index': [121,383],
'title' : ['art1 magic world', 'art2 fantastic comic'],
'dimension': ['100x82','61x61']
'year': [2000, 2017]

我失败的尝试:

  • str.split(expand=True) 方法,在 df = pd.DataFrame(dict) 上,但我被标题困住了由许多单词组成。

  • .replace() 方法来清理 df['title'] 但我确信有最佳实践。

你能帮忙吗?提前致谢。

最佳答案

您可以创建有趣的正则表达式模式以及 .str.extract像这样提取您想要的信息:

df = pd.DataFrame(db1)
new_df = df["title"].str.extract(r"(?P<index>\d+)\s(?P<title>.*)\s(?P<dimension>\d+x\d+)\s(?P<year>\d+)\.\w+")

print(new_df)
index title dimension year
0 121 art1 magic world 100x82 2000
1 383 art2 fantastic comic 61x61 2017

正则表达式模式的工作原理如下:

  • (?P<index>\d+)捕获字符串开头的数字。我们会将其存储在名为“索引”的捕获组中
  • \s , 在数字之后找到一个空白字符。我们不想对这个角色做任何事情,所以它不会在捕获组中。
  • (?P<title>.*)接下来找到所有字符,直到我们遇到下一个模式:
  • \s(?P<dimension>\d+x\d+)这里的模式是任意数量的数字后跟一个“x”,然后是更多的数字。我们将这个字符串存储到一个名为维度的捕获组中。此字符串还必须以我们需要出现但最终忽略的空格开头。
  • \s找到维度后,我们期待另一个我们不做任何操作的空白字符。
  • (?P<year>\d+) ,我们的最后一个捕获组“year”只是在我们的模式末尾找到最后的数字。
  • \.\w+ : 我们模式的结尾是句号“.”后跟字母和/或数字的任意组合 - 这是为了匹配“.jpg”,但也会匹配任何其他文件后缀。

关于python - 有没有办法在 Pandas 中自定义清理一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68071743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com