为了账号安全,请及时绑定邮箱和手机立即绑定

如何拆分具有多个选项的熊猫系列?

如何拆分具有多个选项的熊猫系列?

MYYA 2022-12-27 14:49:20
我有一个带有字符串列的熊猫数据框。我想要做的是将城市名称与字符串分开。这是我的 MWE:import numpy as npimport pandas as pddata = """\2930 Beverly Glen Circle Los Angeles435 S. La Cienega Blvd. Los Angeles12224 Ventura Blvd. Studio City9570 Wilshire Blvd. Beverly Hills26025 Pacific Coast Hwy. Malibu""".split('\n')df = pd.DataFrame(data)print(df)cities = ['Los Angeles', 'Studio City', 'Beverly Hills','Malibu']pat = '|'.join([r'(.*)\s({city})' for city in cities])df = df[0].str.extract(pat,expand=True)df如何获得以下输出:                                      0 addr                      city0  2930 Beverly Glen Circle Los Angeles 2930 Beverly Glen Circle Los Angeles1   435 S. La Cienega Blvd. Los Angeles 435 S. La Cienega Blvd.  Los Angeles2       12224 Ventura Blvd. Studio City 12224 Ventura Blvd.      Studio City3     9570 Wilshire Blvd. Beverly Hills 9570 Wilshire Blvd.      Beverly Hills4       26025 Pacific Coast Hwy. Malibu 26025 Pacific Coast Hwy. Malibu
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

您可以尝试使用Series.str.split


pat = '|'.join([rf'\s(?={city})' for city in cities])

df1 = df[0].str.split(pat, expand=True).rename(columns={0: 'addr', 1: 'city'})

df = pd.concat([df[0], df1], axis=1)

或者,您可以使用Series.str.extract


pat = r'(?P<addr>.*)?\s' +  r'(?P<city>' + '|'.join(cities) + r')'

df = pd.concat([df[0], df[0].str.extract(pat, expand=True)], axis=1)

结果:


# print(df)

                                      0                      addr           city

0  2930 Beverly Glen Circle Los Angeles  2930 Beverly Glen Circle    Los Angeles

1   435 S. La Cienega Blvd. Los Angeles   435 S. La Cienega Blvd.    Los Angeles

2       12224 Ventura Blvd. Studio City       12224 Ventura Blvd.    Studio City

3     9570 Wilshire Blvd. Beverly Hills       9570 Wilshire Blvd.  Beverly Hills

4       26025 Pacific Coast Hwy. Malibu  26025 Pacific Coast Hwy.         Malibu


查看完整回答
反对 回复 2022-12-27
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

您应该将可选匹配项移动到一个捕获组中:


import pandas as pd


data = """\

2930 Beverly Glen Circle Los Angeles

435 S. La Cienega Blvd. Los Angeles

12224 Ventura Blvd. Studio City

9570 Wilshire Blvd. Beverly Hills

26025 Pacific Coast Hwy. Malibu""".split('\n')


df = pd.DataFrame(data)

print(df)


cities = ['Los Angeles', 'Studio City', 'Beverly Hills','Malibu']

c = '|'.join(cities)

pat = fr'(.*?)\s({c})'                     # fixed pattern with f and r

df = df[0].str.extract(pat,expand=True)

print(df)

输出:


                          0              1

0  2930 Beverly Glen Circle    Los Angeles

1   435 S. La Cienega Blvd.    Los Angeles

2       12224 Ventura Blvd.    Studio City

3       9570 Wilshire Blvd.  Beverly Hills

4  26025 Pacific Coast Hwy.         Malibu



查看完整回答
反对 回复 2022-12-27
  • 2 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信