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

杰罗姆

我是 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法使用 Pandas 将行值拆分为单独的列?

有没有办法计算 Pandas 中大于“变量”值的行中值的数量?

有没有办法在 Pandas Dataframe 的多行和多列中对值进行排名?

有没有办法将.obj文件加载到Pandas或Numpy中?

在 Pandas 的多列中过滤后,有没有办法获取原始行的索引?

有没有办法将单行转换为pandas中的列

有没有办法识别浮动 NaN 然后在 Pandas 数据框中替换它们?

有没有办法在Python-Pandas中多重过滤Dataframe?

有没有办法将 Pandas pivot_table 放入 Plotly 表中?

有没有办法获取列表包含的与 Pandas Dataframe 中的值匹配的值?

有没有办法将 Pandas 的输出连接到单个多索引中?

有没有办法使用 for 循环在 matplotlib 和 pandas 中快速创建子批次?

有没有办法用 Pandas 中的字符串值替换 True/False?

有没有办法将多个 Pandas 行聚合成具有额外列的单行?

有没有办法将 Pandas 中块的大小定义为可用内存的函数?

有没有办法使用python在Pandas DataFrame中使用行索引范围选择列的特定部分

有没有办法读取表格单元格中的链接以及使用 pandas 和 beautifulsoup 的值

有没有办法导出excel工作簿中的单个工作表以使用pandas分隔csv文件?

有没有办法将基于时间的事件划分为python pandas中的小时模板?

有没有办法对当前在 Pandas 数据帧中的行进行迭代的代码进行矢量化?

有没有办法在 Pandas python 中使用多列获取交叉表(频率表)中的 Total 列

Pandas 中有没有办法使用前一行值来计算一行的新值

有没有办法“截断一行”?

清理 csv 数据,w/pandas 有没有办法找到第一个可以转换为 # 的 obj 列?

有没有办法将先前计算的行值与 Pandas Dataframe 中不同列的总和一起使用?

有没有办法在 Pandas 中组合多列,可以将来自某些列的所有数据连接到一列(12 列到 1)

有没有办法清理Docker构建缓存?

有没有办法清理此结构?

Pandas:对于具有多列整数和字符串的数据框,有没有办法指定 max() 函数查看哪一列?