【问题标题】:Changing column value by finding substring in string values通过在字符串值中查找子字符串来更改列值
【发布时间】:2018-04-20 21:48:01
【问题描述】:

我正在尝试使用 pandas apply() 更改单个列中的值。我的功能部分工作,但我坚持如何修复另一半。

数据栏:

County Name Riverside County San Diego County SanFrancisco County/city

我正试图摆脱“县”,所以我只剩下县名。我使用该功能成功摆脱了“县”,但在从旧金山删除“县/市”时遇到了麻烦。

代码:

def modify_county(countyname):
  if "/city" in countyname:
    return countyname.replace(" County/city","")
  return countyname.replace(" County","")

lfd["CountyName"] = lfd["CountyName"].apply(modify_county)

输出:

CountyName
Riverside
San Diego
San Francisco County/city

函数中的条件有问题吗?

【问题讨论】:

  • 为什么要有 if 语句?如果 "/city" 不在字符串中,则countyname.replace(" County/city", "") 不会做任何事情
  • 我复制了你的代码和输入,效果很好。

标签: python pandas substring pandas-apply


【解决方案1】:

这是另一种方式。它适用于您提供的数据。

import pandas as pd

s = pd.Series(['Riverside County', 'San Diego County', 'SanFrancisco County/city'])

res = s.apply(lambda x: ' '.join([w for w in x.split() if not 'County' in w]))

print(res)

# 0       Riverside
# 1       San Diego
# 2    SanFrancisco
# dtype: object

【讨论】:

    【解决方案2】:

    @jpp 的答案是按照您的要求做的字面意思。但在这种情况下,我会使用 pandas.Series.replace 和一些正则表达式一次性替换整个内容:

    import pandas as pd
    
    s = pd.Series(['Riverside County', 'San Diego County', 'SanFrancisco County/city'])
    
    res = s.replace(' County(/city)?', '', regex=True)
    

    【讨论】:

      【解决方案3】:

      @jpp,使用建议应用于整个列。不确定这是否是最好的方法,但它确实有效。

      lfd["CountyName"] = pd.Series(lfd["CountyName"])

      lfd["CountyName"] = lfd["CountyName"].apply(lambda x: ' '.join([w for w in x.split() if not 'County' in w]))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-16
        • 2017-02-12
        • 1970-01-01
        • 2013-05-27
        • 2011-04-10
        相关资源
        最近更新 更多