Python 从数据流中提取值
我有非常奇怪的数据通过curl进入我的pandas数据框。我想做的是从列中提取值,如下所述。有人能指导我如何提取信息吗Python 从数据流中提取值,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有非常奇怪的数据通过curl进入我的pandas数据框。我想做的是从列中提取值,如下所述。有人能指导我如何提取信息吗 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
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
srv_id
------
14593 104731
14595 104732
14609
178282
如果要将此信息提取到两个新列中,可以这样做:
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
如果要用提取的数字替换字符串:
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
谢谢你的回复。第一个解决方案对我来说非常有效
df[['TicketID','ServiceID']]=\df.srv_id.str.extract(r'TicketID\s+(\d+).*?ServiceID\s+(\d+),expand=True)
但如果可以为空,则可以执行该作业,而不是0。之后我打算删除srv_id列。谢谢。这使得第三名的人数减少了14609人,第四名的人数减少了178282人。我所希望的是,它只是删除了0并将其变为空白。所需输出:3 TicketID 14609\u ServiceID 0 14609 NaN 4 TicketID 0\u ServiceID 178282 NaN 178282谢谢。什么是np.nan?是在进口numpy之后吗<代码>名称错误:未定义名称“np”np
是numpy模块的标准别名,请执行以下操作:将numpy导入为np
先生,您是真正的MVP。拍手