首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫溪流提取值

熊猫溪流提取值
EN

Stack Overflow用户
提问于 2016-10-18 14:57:08
回答 1查看 119关注 0票数 1

我有非常奇怪的数据通过卷曲进入我的熊猫数据。我想要做的是从列中提取值,如下所述。有人能指导我如何提取信息吗?

代码语言:javascript
复制
cc = pd.read_csv(cc_curl)
print(cc['srv_id'])

srv_id
------
TicketID 14593_ServiceID 104731
ServiceID 
TicketID 14595_ServiceID 104732
TicketID 14609_ServiceID 0
TicketID 0_ServiceID 178282
  1. 提取5位机票标识和6位服务标识。
  2. 不提取任何内容,因为没有ticketID,而且服务ID是空的。
  3. 提取5位机票标识和6位服务标识。
  4. 只提取5位的票证id,服务id应为空,因为它是0。
  5. 只提取6位服务id,并将票证ID留空,因为它是0。

期望输出

代码语言:javascript
复制
srv_id
------
14593 104731

14595 104732
14609
 178282
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 15:52:25

如果要将此信息提取到两个新列中,可以这样做:

代码语言:javascript
复制
import numpy as np
import pandas as pd

In [22]: df[['TicketID','ServiceID']] = (
    ...:   df.srv_id.str.extract(r'TicketID\s+(\d+).*?ServiceID\s+(\d+)', expand=True)
    ...:     .replace(r'\b0\b', np.nan, regex=True)
    ...: )
    ...:

In [23]: df
Out[23]:
                            srv_id TicketID ServiceID
0  TicketID 14593_ServiceID 104731    14593    104731
1                       ServiceID       NaN       NaN
2  TicketID 14595_ServiceID 104732    14595    104732
3       TicketID 14609_ServiceID 0    14609       NaN
4      TicketID 0_ServiceID 178282      NaN    178282

如果要用提取的数字替换字符串:

代码语言:javascript
复制
In [161]: df['new_srv_id'] = \
              df.srv_id.replace([r'[^\d{5,}]+', r'\s*\b0\b\s*'], [' ', ''], regex=True)

In [162]: df
Out[162]:
                            srv_id     new_srv_id
0  TicketID 14593_ServiceID 104731   14593 104731
1                       ServiceID
2  TicketID 14595_ServiceID 104732   14595 104732
3       TicketID 14609_ServiceID 0          14609
4      TicketID 0_ServiceID 178282         178282
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40111647

复制
相关文章

相似问题

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