根据列表中的项目分割DataFrame中的列。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据列表中的项目分割DataFrame中的列。相关的知识,希望对你有一定的参考价值。
我有以下表格,想把每一行分成三列:州、邮编和城市。州和邮编很简单,但我无法提取城市。我想过将每个字符串拆分在街道同义词之后,状态之前,但我似乎弄错了循环,因为它只会使用我列表中的最后一项。
输入数据。
Address Text
0 11 North Warren Circle Lisbon Falls ME 04252
1 227 Cony Street Augusta ME 04330
2 70 Buckner Drive Battle Creek MI
3 718 Perry Street Big Rapids MI
4 14857 Martinsville Road Van Buren MI
5 823 Woodlawn Ave Dallas TX 75208
6 2525 Washington Avenue Waco TX 76710
7 123 South Main St Dallas TX 75201
我想实现的输出(所有的行,但为了节省时间,我只写出了前两行)。
City State Postcode
0 Lisbon Falls ME 04252
1 Augusta ME 04330
我的代码。
# Extract postcode and state
df["Zip"] = df["Address Text"].str.extract(r'(d{5})', expand = True)
df["State"] = df["Address Text"].str.extract(r'([A-Z]{2})', expand = True)
# Split after these substrings
street_synonyms = ["Circle", "Street", "Drive", "Road", "Ave", "Avenue", "St"]
# This is where I got stuck
df["Syn"] = df["Address Text"].apply(lambda x: x.split(syn))
df
答案
这里有一个方法。
import pandas as pd
# data
df = pd.DataFrame(
['11 North Warren Circle Lisbon Falls ME 04252',
'227 Cony Street Augusta ME 04330',
'70 Buckner Drive Battle Creek MI',
'718 Perry Street Big Rapids MI',
'14857 Martinsville Road Van Buren MI',
'823 Woodlawn Ave Dallas TX 75208',
'2525 Washington Avenue Waco TX 76710',
'123 South Main St Dallas TX 75201'],
columns=['Address Text'])
# Extract postcode and state
df["Zip"] = df["Address Text"].str.extract(r'(d{5})', expand=True)
df["State"] = df["Address Text"].str.extract(r'([A-Z]{2})', expand=True)
# Split after these substrings
street_synonyms = ["Circle", "Street", "Drive", "Road", "Ave", "Avenue", "St"]
def find_city(address, state, street_synonyms):
for syn in street_synonyms:
if syn in address:
# remove street
city = address.split(syn)[-1]
# remove State and postcode
city = city.split(state)[0]
return city
df['City'] = df.apply(lambda x: find_city(x['Address Text'], x['State'], street_synonyms), axis=1)
print(df[['City', 'State', 'Zip']])
"""
City State Zip
0 Lisbon Falls ME 04252
1 Augusta ME 04330
2 Battle Creek MI NaN
3 Big Rapids MI NaN
4 Van Buren MI 14857
5 Dallas TX 75208
6 nue Waco TX 76710
7 Dallas TX 75201
"""
以上是关于根据列表中的项目分割DataFrame中的列。的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 Pandas 中的列表过滤 DataFrame 中的项目?
将 Pandas DataFrame 中的列组合到 DataFrame 中的列表列
有啥方法可以扩展包含列表的 pandas Dataframe 中的列并从列表值本身中获取列名?