簡體   English   中英

使用循環基於str條件構造具有多列的數據框-python

[英]Constructing a dataframe with multiple columns based on str conditions using a loop - python

我有一個包含用戶位置的webscraped Twitter DataFrame。 位置變量如下所示:

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''Virginia'錯誤匹配,或者避免諸如'Washington County, Minnesota'

如果您希望多個狀態在一行上匹配,那么.extractall變成.extractall在第0級進行求和:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM