使用循环构建基于海峡条件的多个列的数据帧 - 蟒蛇
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用循环构建基于海峡条件的多个列的数据帧 - 蟒蛇相关的知识,希望对你有一定的参考价值。
我有一个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
或者布尔值相同。
答案
使用.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\d5,)?\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
以上是关于使用循环构建基于海峡条件的多个列的数据帧 - 蟒蛇的主要内容,如果未能解决你的问题,请参考以下文章