作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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/
我是一名优秀的程序员,十分优秀!