使用循环python构建基于str条件的多列数据帧

2024-10-01 19:16:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含用户位置的Twitter数据框。位置变量如下所示:

2          Crockett, Houston County, Texas, 75835, USA
3                                   NYC, New York, USA
4                            Warszawa, mazowieckie, RP
5                                           Texas, USA
6                 Virginia Beach, Virginia, 23451, USA
7          Louisville, Jefferson County, Kentucky, USA

我想通过使用一个循环来为所有美国州构建国家假人。你知道吗

我已经设法从美国提取用户使用

location_usa = location_df['location'].str.contains('usa', case = False)

但是代码太庞大了,我为每个州都写了这个。我有一个字符串列表。 我也不能用

pd.Series.Str.get_dummies()

因为在同一个州有不同的地方,每个条目都是一个完整的句子。你知道吗

我希望输出像这样:

   Alabama   Alaska  Arizona
1        0        0        1
2        0        1        0
3        1        0        0 
4        0        0        0

或与布尔值相同。你知道吗


Tags: 数据用户newtwitterlocationyorknyccounty
1条回答
网友
1楼 · 发布于 2024-10-01 19:16:52

使用.str.extract获取状态的Series,然后对该Series使用pd.get_dummies。将需要定义所有50个州的列表:

import pandas as pd

states = ['Texas', 'New York', 'Kentucky', 'Virginia']
pd.get_dummies(df.col1.str.extract('(' + '|'.join(x+',' for x in states)+ ')')[0].str.strip(','))

   Kentucky  New York  Texas  Virginia
0         0         0      1         0
1         0         1      0         0
2         0         0      0         0
3         0         0      1         0
4         0         0      0         1
5         1         0      0         0

注意,我在状态后面匹配了',',因为这似乎就是模式,并允许您避免像'Virginia''Virginia Beach'这样的错误匹配,或者像'Washington County, Minnesota'这样的问题

如果您希望多个状态在一行上匹配,那么这将成为跨第0级的.extractall求和:

pd.get_dummies(df.col1.str.extractall('(' + '|'.join(x+',' for x in states)+ ')')[0].str.strip(',')).sum(level=0).clip(upper=1)

编辑:

也许有更好的方法,但正如@BradSolomon所建议的,允许在'State,( optional 5 digit Zip,) USA'上进行匹配会更安全一些

states = ['Texas', 'New York', 'Kentucky', 'Virginia', 'California', 'Pennsylvania']
pat = '(' + '|'.join(x+',?(\s\d{5},)?\sUSA' for x in states)+ ')'

s = df.col1.str.extract(pat)[0].str.split(',').str[0]

输出:s

0           Texas
1        New York
2             NaN
3           Texas
4        Virginia
5        Kentucky
6    Pennsylvania
Name: 0, dtype: object

从输入

                                          col1
0  Crockett, Houston County, Texas, 75835, USA
1                           NYC, New York, USA
2                    Warszawa, mazowieckie, RP
3                                   Texas, USA
4         Virginia Beach, Virginia, 23451, USA
5  Louisville, Jefferson County, Kentucky, USA
6                California, Pennsylvania, USA

相关问题 更多 >

    热门问题