使用循环构建基于海峡条件的多个列的数据帧 - 蟒蛇

问题描述 投票:0回答:1

我有一个Twitter的webscraped数据框,其中包括用户的位置。位置变量是这样的:

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

或者布尔值相同。

python pandas dataframe condition
1个回答
1
投票

使用.str.extract得到状态的Series,然后对pd.get_dummies使用Series。需要定义所有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级qazxsw POI总结:

.extractall

编辑:

也许有更好的方式,而是通过@BradSolomon允许在pd.get_dummies(df.col1.str.extractall('(' + '|'.join(x+',' for x in states)+ ')')[0].str.strip(',')).sum(level=0).clip(upper=1) 比赛的建议这可能是一个更加安全

'State,( optional 5 digit Zip,) USA'

Output: 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
© www.soinside.com 2019 - 2024. All rights reserved.