将特定列更改为Pandas DataFrame列表中的值

时间:2017-10-09 21:56:18

标签: python pandas dataframe

编码和python相当新。

我的DataFrame目前看起来像这样。

Text          Location
....          NY, USA
....          NewYork
....          Austin,Texas
....          Tx
....          California
....          Somehere on Earth

DataFrame包含从Users Bio中提取的推文和位置。

states = ["AL","Alabama", "AK","Alaska", "AS", "American Samoa", "AZ", "Arizona",  "AR", "Arkansas", "CA", "California", "CO", "Colarado" "CT", "Connecticut"  "DE", "Delaware", "DC", "District Of Columbia", "FM", "Federated States Of Micronesia", "FL", "Florida" "GA", "Georgia", "GU", "Guam" "HI", "Hawaii", "ID", "Idaho", "IL", "Illinois", "IN", "Indiana","IA", "Iowa", "KS", "Kansas",  "KY", "Kentucky", "LA", "Louisiana","ME", "Maine", "MH", "Marshall Islands", "MD", "Maryland", "MA", "Massachusetts", "MI", "Michigan", "MN", "Minnesota", "MS", "Mississippi", "MO", "Missouri", "MT",  "Montana", "NE", "Nebraska", "NV", "Nevada", "NH", "New Hampshire", "NJ", "New Jersey", "NM", "New Mexico", "NY", "New York", "NC", "North Carolina", "ND", "North Dakota", "MP", "Northern Mariana Islands", "OH", "Ohio", "OK", "Oklahoma", "OR", "Oregon", "PW", "Palau", "PA", "Pennsylvania","PR", "Puerto Rico", "RI", "Rhode Island", "SC", "South Carolina", "SD", "South Dakota", "TN", "Tennessee", "TX", "Texas", "UT", "Utah", "VT", "Vermont", "VI", "Virgin Islands", "VA", "Virginia", "WA",  "Washington", "WV", "West Virginia", "WI", "Wisconsin", "WY", "Wyoming"]

现在我试图找出是否有办法将位置字段更改为以下格式。

Text         Location
....         NY
....         NewYork
....         Texas
....         Tx
....         California
....         NaN

我尝试替换列表中的值。但它并没有完成这项工作。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

听起来你需要一个带有一些正则表达式的lambda函数。

import re
states_lower = [state.lower() for state in states]
df['NewLocation'] = df['Location'].map(lambda x: ' '.join([loc for loc in re.findall('\\w+',x) if loc.lower() in states]))
  • 首先,小写所有状态以便于匹配
  • 正则表达式抓住所有单词
  • 循环显示结果列表,以确定states列表
  • 中的哪些字词
  • 将其余项目加在一起,最后得到一个字符串

答案 1 :(得分:0)

这是一种方式:

In [230]: df
Out[230]:
   Text           Location
0  ....            NY, USA
1  ....            NewYork
2  ....       Austin,Texas
3  ....                 Tx
4  ....         California
5  ....  Somehere on Earth

In [231]: states = [
     ...:   "AL","Alabama", "AK","Alaska", "AS", "American Samoa", "AZ", "Arizona",  "AR", "Arkansas",
     ...:   "CA", "California", "CO", "Colarado", "CT", "Connecticut", "DE", "Delaware", "DC", "District Of Columbia",
     ...:   "FM", "Federated States Of Micronesia", "FL", "Florida", "GA", "Georgia", "GU", "Guam", "HI", "Hawaii",
     ...:   "ID", "Idaho", "IL", "Illinois", "IN", "Indiana","IA", "Iowa", "KS", "Kansas", "KY", "Kentucky",
     ...:   "LA", "Louisiana","ME", "Maine", "MH", "Marshall Islands", "MD", "Maryland", "MA", "Massachusetts",
     ...:   "MI", "Michigan", "MN", "Minnesota", "MS", "Mississippi", "MO", "Missouri", "MT",  "Montana",
     ...:   "NE", "Nebraska", "NV", "Nevada", "NH", "New Hampshire", "NJ", "New Jersey", "NM", "New Mexico",
     ...:   "NY", "New York", "NC", "North Carolina", "ND", "North Dakota", "MP", "Northern Mariana Islands",
     ...:   "OH", "Ohio", "OK", "Oklahoma", "OR", "Oregon", "PW", "Palau", "PA", "Pennsylvania","PR", "Puerto Rico",
     ...:   "RI", "Rhode Island", "SC", "South Carolina", "SD", "South Dakota", "TN", "Tennessee", "TX", "Texas",
     ...:   "UT", "Utah", "VT", "Vermont", "VI", "Virgin Islands", "VA", "Virginia", "WA",  "Washington",
     ...:   "WV", "West Virginia", "WI", "Wisconsin", "WY", "Wyoming"]
     ...:

In [232]: pat = [r'.*\b{}\b.*'.format(x.upper()) for x in states]
     ...: repl = [states[i//2*2] for i,_ in enumerate(states)]
     ...:

In [233]: df.Location.str.upper().replace(pat, repl, regex=True)
Out[233]:
0                   NY
1              NEWYORK
2                   TX
3                   TX
4                   CA
5    SOMEHERE ON EARTH
Name: Location, dtype: object