【问题标题】:Python Compare Dataframe columns and replace with contents based on prefixPython比较数据框列并替换为基于前缀的内容
【发布时间】:2018-12-17 18:15:28
【问题描述】:

在 python 中工作仍然相对较新,并且遇到了一些问题。

我目前有一个小程序,它获取 csv 文件,合并它们,将它们放入数据框中,然后转换为 excel。

我要做的是根据数据框列的值的前缀匹配'Team'和'Abrev'的值,然后用'Abrev'列内容替换Team列。

Team         Games  Points  Abrev
Arsenal      38     87      ARS
Liverpool    38     80      LIV
Manchester   38     82      MAN
Newcastle    38     73      NEW

我希望它最终看起来像下面这样:

Team  Games  Points  
ARS   38     87      
LIV   38     80    
MAN   38     82      
NEW   38     73     

所以我在想的是我需要一个 for 循环来遍历数据框中的行数,然后我需要一种方法来通过 Abrev 列中的前缀比较内容。如果前三个字母匹配,则替换,但我不知道该怎么做,因为我试图不对其进行硬编码。

有人可以帮助或指出正确的方向吗?

【问题讨论】:

  • 如果数据中已经有 Abbreviation 列,您不能直接删除 team 列并重命名 Abbr 列吗?如果不是这种情况,您可以使用“df['Team'].str.slice' 从团队列创建缩写列
  • 这是在没有与团队名称匹配的缩写的情况下。我正在尝试比较内容,几乎就像部分字符串匹配。我只是想将缩写值与字符串“Arsenal”中的前三个字母进行比较,我只是不确定如何。 @GauravTaneja

标签: python csv dataframe match multiple-columns


【解决方案1】:

您可以使用apply 操作来获得所需的输出。

df = pd.read_csv('input.csv')
df['Team'] = df.apply(lambda row: row['Team'] if row['Team'][:3].upper()!= row['Abrev'] 
                       else row['Abrev'],axis=1)
df.drop('Abrev', axis=1, inplace=True)

这给了你:

Team  Games  Points  
ARS   38     87      
LIV   38     80    
MAN   38     82      
NEW   38     73    

【讨论】:

  • 谢谢!这正是我想要做的,感谢您的意见。
【解决方案2】:

pandas 就是你要找的 将熊猫导入为 pd

df = pd.read_csv('input.csv')
df['team'] = df['Abrev']
df.drop('Abrev', axis=1, inplace=True)
df.to_excel('output.xls')

【讨论】:

  • 我已经完成了。如上所述,我想使用这些列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
相关资源
最近更新 更多