我是 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+)
捕获字符串开头的数字。我们将把它存储在一个名为“index”的捕获组中\s
, 在数字之后找到一个空格字符。我们不想对这个角色做任何事情,所以它不会在一个捕获组中。(?P<title>.*)
接下来查找所有字符,直到我们遇到下一个模式:\s(?P<dimension>\d+x\d+)
这里的模式是任意数量的数字,后跟一个“x”,然后是更多的数字。我们将此字符串存储到称为维度的捕获组中。该字符串还必须以我们需要出现但最终忽略的空格开头。\s
在我们找到维度之后,我们期待另一个我们不做任何处理的空白字符。(?P<year>\d+)
,我们的最后一个捕获组“year”只是在我们的模式末尾找到最后一个数字。\.\w+
: 我们模式的结尾是一个句号“.” 后跟字母和/或数字的任意组合 - 这是为了匹配“.jpg”,但也将匹配任何其他文件后缀。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句