Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从数据流中提取值_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 从数据流中提取值

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

我有非常奇怪的数据通过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
  • 提取5位票证id和6位服务id
  • 由于没有ticketID且服务ID为空,因此不提取任何内容
  • 提取5位票证id和6位服务id
  • 仅提取5位票证id,服务id应为空,因为它是0
  • 仅提取6位服务id,并保留票证id为空,因为它是0
  • 期望输出

    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。拍手