0

我正在尝试使用 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

函数中的条件有问题吗?

4

3 回答 3

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
于 2018-04-20T21:56:32.490 回答
1

@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)
于 2018-04-20T22:08:16.460 回答
0

@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]))
于 2018-04-21T22:18:18.113 回答