【问题标题】:Iterate over columns, find selection, create new column遍历列,查找选择,创建新列
【发布时间】:2020-02-28 08:52:51
【问题描述】:

我正在尝试对网站进行 webscraep 并创建名称和图像链接的数据框。 但是在我解析名称时存在一些问题。

我的数据框是这样的;

color    gender    model1    model2  extra_col1  extra_col2    extra_col3
black    male       A24      B2       
red      woman      A1       B3
19sf     black      male     A22        B1
deep     1909sf     2202     blue       woman         A1          B22   

前两行是正确的。我想遍历这 7 列并正确找到颜色、性别和模型并创建新列;

下表是我想要的;

color    gender    model1    model2     
black    male       A24      B2                                           
red      woman      A1       B3
black    male       A22      B1
blue     woman      A1       B22

我有颜色、性别、模型1、模型2的唯一值列表 我需要比较特定列中的每个元素并与列表匹配,并在颜色列、性别列等中写入正确的元素。

谢谢。

【问题讨论】:

  • 您能否在将数据放入数据框之前添加一个 sn-p 来说明您的数据的外观?
  • 在我看来(根据您的示例)您希望始终以最后 4 列结束?我说的对吗?
  • 您正在尝试在输入数据框后修复数据,此时最好修复您输入数据框的方式。确实可以修复数据框本身,但您将不得不使用更糟糕的 pandas 技术,而修复原始数据肯定会更好。
  • @jvdV 是的,你是对的。
  • @Serge Ballesta 它是一个 html 对象,因此通常应该有 4 个元素,如帖子最后一个表中的元素。我想最好一劳永逸地执行该操作,否则在我抓取时我需要检查我不喜欢的 for 循环中的每个元素

标签: python string pandas for-loop


【解决方案1】:

嗯,肯定不干净。 Python 专业人士肯定会有他们的顾虑,但由于我是 PythonPandas 的新手,我只是使用了一些 JoinRegular ExpressionsSplit 来试一试:

import pandas as pd
df = pd.DataFrame({'color':['black','red','19sf','deep'],
                   'gender':['male','woman','black','1909sf'],
                   'model1':['A24','A1','Male','2202'],
                   'model2':['B2','B3','A22','blue'],
                   'extra_col1':['','','B1','woman'],
                   'extra_col2':['','','','A1'],
                   'extra_col3':['','','','B22']})
df = df[df.columns[0:]].apply(lambda x: '|'.join(x.dropna().astype(str)), axis=1)
df = df.replace(r'.*?((?:\w+\|){3}\w+(?=\|*$)).*', value = r'\1', regex = True)
df = df.str.split('|', expand = True)
df.columns = ['color','gender','model1','model2']
print(df)

同样,虽然我对VBA 之外的编程非常陌生,但它可以完成这项工作,但可能会做得更整洁。祈祷它对你有用 =)

【讨论】:

  • 运气好吗?? @Tyr
  • 感谢您的回答!它适用于给定的数据集,但我需要更通用的解决方案,例如在列中匹配颜色列表。例如,应该在所有列中搜索“黑色”并写入给定行的颜色列。
  • 这就是为什么我事先询问您是否总是需要获取最后 4 个非空值,您说这是对的。 @Tyr。我现在没有想法了=)。祝你好运。
  • 我将“最后 4 列”理解为有问题的最后一个表。还是谢谢你:)
  • @Tyr,除非你用源数据解决这个问题,否则我认为任何编程语言都很难知道到底在哪里搜索什么值以及把它放在哪里。如果在第一列中找不到有效值怎么办,您希望代码如何理解搜索黑色或任何其他颜色并将其放入第 1 列?看看是否有人能想出更通用的东西会很有趣。
猜你喜欢
  • 2021-04-14
  • 2017-08-19
  • 2021-12-15
  • 2018-07-30
  • 2019-11-06
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
相关资源
最近更新 更多