首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多字符串列映射和清理

多字符串列映射和清理
EN

Stack Overflow用户
提问于 2018-08-21 10:29:18
回答 1查看 40关注 0票数 1

我有这样一个数据栏:

代码语言:javascript
复制
df['zone'].unique()

out[4]: 

array(['BROOKLYN', 'BRONX', '07 BRONX', 'Unspecified', '05 BRONX',
       'QUEENS', 'MANHATTAN', '07 MANHATTAN', 'STATEN ISLAND',
       '17 BROOKLYN', '0 Unspecified', 'Unspecified MANHATTAN',
       '12 BROOKLYN', '07 BROOKLYN', '09 MANHATTAN', '01 STATEN ISLAND',
       '12 MANHATTAN', '04 QUEENS', '06 BROOKLYN',
       '01/04/2016 01:45:00 PM', '01/02/2016 05:43:34 AM', '07 QUEENS',
       '11 BRONX', '01/04/2016 03:45:00 PM', '10 MANHATTAN', '03 BRONX',
       '04 BRONX', ' or 311 Online."', '01/13/2016 12:00:00 AM',
       '04 BROOKLYN', '03 BROOKLYN', '01 QUEENS',
       '01/04/2016 03:34:55 PM', '08 MANHATTAN', '14 BROOKLYN',
       '10 QUEENS', 'Unspecified STATEN ISLAND', '02 BRONX', '09 BRONX',
       '08 QUEENS', '10 BRONX', '03 MANHATTAN', '12 QUEENS',
       ' please call (212) NEW-YORK (212-639-9675)."',
       'Unspecified BROOKLYN', '01/11/2016 04:45:00 PM', '04 MANHATTAN',
       '01 BRONX', '09 BROOKLYN', '01/05/2016 07:00:00 AM', '18 BROOKLYN',
       '01/08/2016 09:00:00 AM', '01 BROOKLYN', '06 BRONX',
       '01 MANHATTAN', '01/06/2016 12:15:00 PM', '02/04/2016 08:45:00 PM',
       '01/05/2016 12:45:00 PM', ' no action was taken."', '05 BROOKLYN',
       '08 BROOKLYN', 'Unspecified QUEENS', '01/08/2016 03:00:00 PM',
       '08/22/2016 12:00:00 AM', '13 BROOKLYN', '02 QUEENS', '14 QUEENS',
       '01/05/2016 08:45:00 AM', '11 QUEENS', '02 MANHATTAN',
       '01/08/2016 10:05:00 AM', '01/05/2016 01:05:00 PM',
       'Unspecified BRONX', '06 QUEENS', '09 QUEENS', '15 BROOKLYN',
       '01/07/2016 09:25:00 AM', '02 STATEN ISLAND',
       '01/02/2016 12:00:00 PM', '01/06/2016 08:45:00 PM',
       '04/04/2016 12:00:00 AM', '01/06/2016 08:30:00 AM'])

正如你所看到的,我在那里有很多不同的类型,所有的东西都被熊猫归类为字符串对象。我已经尝试过pd.read_csv命令中的一些参数,如low_memory = Falsechunksize等.百无所成。

不过,我在这里真正需要做的是将本专栏映射为以下格式:

代码语言:javascript
复制
(Manhattan -> 1, Brooklyn -> 2, Queens -> 3, Staten Island -> 4, Bronx -> 5, Other -> 0)

我也需要包括字符串'07布朗克斯‘作为布朗克斯,而不是作为其他或未知。

我一直认为.map()方法是可行的,但是由于列中混合类型的混乱,我不再确定我的选项是什么。

如有任何建议,我将不胜感激。

提前谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-21 10:34:30

创建字典,通过字典的extract键将值与|进行OR by map的映射,最后将所有不匹配的值都映射到0

代码语言:javascript
复制
a = np.array(['BROOKLYN', 'BRONX', '07 BRONX', 'Unspecified', '05 BRONX',
       'QUEENS', 'MANHATTAN', '07 MANHATTAN', 'STATEN ISLAND',
       '17 BROOKLYN', '0 Unspecified', 'Unspecified MANHATTAN',
       '12 BROOKLYN', '07 BROOKLYN', '09 MANHATTAN', '01 STATEN ISLAND',
       '12 MANHATTAN', '04 QUEENS', '06 BROOKLYN',
       '01/04/2016 01:45:00 PM', '01/02/2016 05:43:34 AM', '07 QUEENS',
       '11 BRONX', '01/04/2016 03:45:00 PM', '10 MANHATTAN', '03 BRONX',
       '04 BRONX', ' or 311 Online."', '01/13/2016 12:00:00 AM',
       '04 BROOKLYN', '03 BROOKLYN', '01 QUEENS',
       '01/04/2016 03:34:55 PM', '08 MANHATTAN', '14 BROOKLYN',
       '10 QUEENS', 'Unspecified STATEN ISLAND', '02 BRONX', '09 BRONX',
       '08 QUEENS', '10 BRONX', '03 MANHATTAN', '12 QUEENS',
       ' please call (212) NEW-YORK (212-639-9675)."',
       'Unspecified BROOKLYN', '01/11/2016 04:45:00 PM', '04 MANHATTAN',
       '01 BRONX', '09 BROOKLYN', '01/05/2016 07:00:00 AM', '18 BROOKLYN',
       '01/08/2016 09:00:00 AM', '01 BROOKLYN', '06 BRONX',
       '01 MANHATTAN', '01/06/2016 12:15:00 PM', '02/04/2016 08:45:00 PM',
       '01/05/2016 12:45:00 PM', ' no action was taken."', '05 BROOKLYN',
       '08 BROOKLYN', 'Unspecified QUEENS', '01/08/2016 03:00:00 PM',
       '08/22/2016 12:00:00 AM', '13 BROOKLYN', '02 QUEENS', '14 QUEENS',
       '01/05/2016 08:45:00 AM', '11 QUEENS', '02 MANHATTAN',
       '01/08/2016 10:05:00 AM', '01/05/2016 01:05:00 PM',
       'Unspecified BRONX', '06 QUEENS', '09 QUEENS', '15 BROOKLYN',
       '01/07/2016 09:25:00 AM', '02 STATEN ISLAND',
       '01/02/2016 12:00:00 PM', '01/06/2016 08:45:00 PM',
       '04/04/2016 12:00:00 AM', '01/06/2016 08:30:00 AM'])
df=pd.DataFrame({ 'zone':a })
代码语言:javascript
复制
d = {'MANHATTAN':1, 'BROOKLYN':2, 'QUEENS' : 3, 'STATEN ISLAND' : 4, 'BRONX' : 5}
pat = '(' + '|'.join(d.keys()) + ')'
df['code'] = df['zone'].str.extract(pat, expand=False).map(d).fillna(0, downcast='int')
print (df.head(10))
            zone  code
0       BROOKLYN     2
1          BRONX     5
2       07 BRONX     5
3    Unspecified     0
4       05 BRONX     5
5         QUEENS     3
6      MANHATTAN     1
7   07 MANHATTAN     1
8  STATEN ISLAND     4
9    17 BROOKLYN     2
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51946675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档