获取位置字符串的最后一个单词,除了 "New York"、"North Dakota"、"South Carolina" 等特殊情况
Getting the last word of a location string, except for special cases like "New York", "North Dakota", "South Carolina", etc
我正在尝试从 pandas 数据框创建一个新字段。该字段是“位置”,它包含城市和州信息。我使用了一个 str.split().str[-1]
函数来获取位置的最后一个单词,通常是完整的州名称。
问题是像“北卡罗来纳州”这样的州变成了“卡罗来纳州”。我想考虑特殊情况,比如 .str[-2]
= "north" or "new" or "south" or "west".
这是我的代码示例:
df["state"] = df.location.str.split().str[-1]
print(df.state.value_counts().reset_index())
这是输出:
index state
0 california 59855
1 york 17
2 illinois 8
3 massachusetts 5
你可以看到“york”应该是“new york”。
我想我应该为位置字段编写一个函数,如下所示:
def get_location(x):
if x.str.split().str[-2] in ["new", "north", "south", "west"]:
return x.str.split().str[-2:]
else:
return x.str.split().str[-1]
这里的问题是我在调用 get_location(df.location)
时收到以下错误消息:
"Series的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()."
我走的路对吗?我该怎么做才能让我的新 df.state 字段变成 return 输出,如下所示:
index state
0 california 59855
1 new york 17
2 illinois 8
3 massachusetts 5
4 north corolina 3
谢谢!
你可以使用 split 方法计算字符串的长度,像这样:
# Dataframe dummy from your Data:
your_df = pd.DataFrame({'location': ['New York', 'North Carolina', 'South Illinois', 'Texas', 'Florida'], 'another_field': [1000, 2000, 3000, 4000, 5000]})
# You verify the count of strings, if there are two or more, then you return full string.
your_df['state'] = your_df['location'].apply(lambda your_location: your_location if len(your_location.split(" ")) > 1 else your_location.split(" ")[-1])
your_df
输出:
location another_field state
0 New York 1000 New York
1 North Carolina 2000 North Carolina
2 South Illinois 3000 South Illinois
3 Texas 4000 Texas
4 Florida 5000 Florida
我正在尝试从 pandas 数据框创建一个新字段。该字段是“位置”,它包含城市和州信息。我使用了一个 str.split().str[-1]
函数来获取位置的最后一个单词,通常是完整的州名称。
问题是像“北卡罗来纳州”这样的州变成了“卡罗来纳州”。我想考虑特殊情况,比如 .str[-2]
= "north" or "new" or "south" or "west".
这是我的代码示例:
df["state"] = df.location.str.split().str[-1]
print(df.state.value_counts().reset_index())
这是输出:
index state
0 california 59855
1 york 17
2 illinois 8
3 massachusetts 5
你可以看到“york”应该是“new york”。
我想我应该为位置字段编写一个函数,如下所示:
def get_location(x):
if x.str.split().str[-2] in ["new", "north", "south", "west"]:
return x.str.split().str[-2:]
else:
return x.str.split().str[-1]
这里的问题是我在调用 get_location(df.location)
时收到以下错误消息:
"Series的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()."
我走的路对吗?我该怎么做才能让我的新 df.state 字段变成 return 输出,如下所示:
index state
0 california 59855
1 new york 17
2 illinois 8
3 massachusetts 5
4 north corolina 3
谢谢!
你可以使用 split 方法计算字符串的长度,像这样:
# Dataframe dummy from your Data:
your_df = pd.DataFrame({'location': ['New York', 'North Carolina', 'South Illinois', 'Texas', 'Florida'], 'another_field': [1000, 2000, 3000, 4000, 5000]})
# You verify the count of strings, if there are two or more, then you return full string.
your_df['state'] = your_df['location'].apply(lambda your_location: your_location if len(your_location.split(" ")) > 1 else your_location.split(" ")[-1])
your_df
输出:
location another_field state
0 New York 1000 New York
1 North Carolina 2000 North Carolina
2 South Illinois 3000 South Illinois
3 Texas 4000 Texas
4 Florida 5000 Florida