簡體   English   中英

使用 Pandas 過濾非結構化數據

[英]Filtering Unstructured data with Pandas

我有一個從 CSV 導入的數據框,從該文件過濾后,我的臨時 DF 在下面

import pandas as pd
import matplotlib.pyplot as plt

 df = pd.read_table("/DATA/testing/ADNS/ADNS_01_40405.txt", sep=" ", 
               error_bad_lines=False,skiprows=1,header=None,skipinitialspace=True)
 df.columns = ["ONE","TWO","THREE","FOUR","FIVE","SIX","SEVE","EIGH","NINE","TEN","ELEV"]
 tmp = df.ONE.str.contains("topoff", na=False)

#tmp = df.ONE.str.isdigit()
TOP_IP = df.loc[tmp]
TOP_IP
ONE    TWO THREE             FOUR          FIVE  SIX SEVE EIGH NINE  TEN  ELEV
483  topoff.pgw-s5s8.epgAMD02.node.epc.mnc005.mcc40...  86400    IN                A   203.88.1.58  NaN  NaN  NaN  NaN  NaN   NaN
484  topoff.sgw-s5s8.epgAMD02.node.epc.mnc005.mcc40...  86400    IN                A  10.169.19.89  NaN  NaN  NaN  NaN  NaN   NaN
486  topoff.pgw-s5s8.epgAMD03.node.epc.mnc005.mcc40...     IN     A      203.88.3.11           NaN  NaN  NaN  NaN  NaN  NaN   NaN
487  topoff.sgw-s5s8.epgAMD03.node.epc.mnc005.mcc40...     IN     A     10.169.18.16           NaN  NaN  NaN  NaN  NaN  NaN   NaN
489  topoff.pgw-s5s8.epgAMD06.node.epc.mnc005.mcc40...     IN     A      203.88.1.49           NaN  NaN  NaN  NaN  NaN  NaN   NaN
490  topoff.sgw-s5s8.epgAMD06.node.epc.mnc005.mcc40...     IN     A     203.88.2.190           NaN  NaN  NaN  NaN  NaN  NaN   NaN
492  topoff.pgw-s5s8.epgAMD07.node.epc.mnc005.mcc40...     IN     A     203.88.4.132           NaN  NaN  NaN  NaN  NaN  NaN   NaN
493  topoff.sgw-s5s8.epgAMD07.node.epc.mnc005.mcc40...     IN     A     203.88.2.190           NaN  NaN  NaN  NaN  NaN  NaN   NaN
495  topoff.pgw-s5s8.epgAMRELICLOUD.node.epc.mnc005...     IN     A    112.110.84.25           NaN  NaN  NaN  NaN  NaN  NaN   NaN
496  topoff.sgw-s5s8.epgAMRELICLOUD.node.epc.mnc005...     IN     A    112.110.84.29           NaN  NaN  NaN  NaN  NaN  NaN   NaN
498  topoff.pgw-s5s8.epgBARODACLOUD.node.epc.mnc005...     IN     A     203.88.4.156           NaN  NaN  NaN  NaN  NaN  NaN   NaN
499  topoff.sgw-s5s8.epgBARODACLOUD.node.epc.mnc005...     IN     A      203.88.16.7           NaN  NaN  NaN  NaN  NaN  NaN   NaN
501  topoff.pgw-s5s8.epgBHUJCLOUD.node.epc.mnc005.m...     IN     A    112.110.84.35           NaN  NaN  NaN  NaN  NaN  NaN   NaN
502  topoff.sgw-s5s8.epgBHUJCLOUD.node.epc.mnc005.m...     IN     A    112.110.84.39           NaN  NaN  NaN  NaN  NaN  NaN   NaN
503  topoff.pgw-s5s8.epgDL02.node.epc.mnc005.mcc404...     IN     A      203.88.1.37           NaN  NaN  NaN  NaN  NaN  NaN   NaN
505  topoff.pgw-s5s8.epgGODHRACLOUD.node.epc.mnc005...     IN     A    112.110.84.20           NaN  NaN  NaN  NaN  NaN  NaN   NaN
506  topoff.sgw-s5s8.epgGODHRACLOUD.node.epc.mnc005...     IN     A    112.110.84.24           NaN  NaN  NaN  NaN  NaN  NaN   NaN

后過濾器我只需要一個和四個字段,其中存在數據,但前兩條記錄不在形狀中。

以下輸出是必需的。

ONE    TWO THREE             FOUR          FIVE  SIX SEVE EIGH NINE  TEN  ELEV
483  topoff.pgw-s5s8.epgAMD02.node.epc.mnc005.mcc40...     IN     A     203.88.1.58            NaN  NaN  NaN  NaN  NaN   NaN
484  topoff.sgw-s5s8.epgAMD02.node.epc.mnc005.mcc40...     IN     A     10.169.19.89           NaN  NaN  NaN  NaN  NaN   NaN
486  topoff.pgw-s5s8.epgAMD03.node.epc.mnc005.mcc40...     IN     A      203.88.3.11           NaN  NaN  NaN  NaN  NaN  NaN   NaN
487  topoff.sgw-s5s8.epgAMD03.node.epc.mnc005.mcc40...     IN     A     10.169.18.16           NaN  NaN  NaN  NaN  NaN  NaN   NaN
489  topoff.pgw-s5s8.epgAMD06.node.epc.mnc005.mcc40...     IN     A      203.88.1.49           NaN  NaN  NaN  NaN  NaN  NaN   NaN
490  topoff.sgw-s5s8.epgAMD06.node.epc.mnc005.mcc40...     IN     A     203.88.2.190           NaN  NaN  NaN  NaN  NaN  NaN   NaN
492  topoff.pgw-s5s8.epgAMD07.node.epc.mnc005.mcc40...     IN     A     203.88.4.132           NaN  NaN  NaN  NaN  NaN  NaN   NaN
493  topoff.sgw-s5s8.epgAMD07.node.epc.mnc005.mcc40...     IN     A     203.88.2.190           NaN  NaN  NaN  NaN  NaN  NaN   NaN
495  topoff.pgw-s5s8.epgAMRELICLOUD.node.epc.mnc005...     IN     A    112.110.84.25           NaN  NaN  NaN  NaN  NaN  NaN   NaN
496  topoff.sgw-s5s8.epgAMRELICLOUD.node.epc.mnc005...     IN     A    112.110.84.29           NaN  NaN  NaN  NaN  NaN  NaN   NaN
498  topoff.pgw-s5s8.epgBARODACLOUD.node.epc.mnc005...     IN     A     203.88.4.156           NaN  NaN  NaN  NaN  NaN  NaN   NaN

我嘗試過 isdigit 和許多其他功能,但無法這樣做。 任何幫助都合適。

想法是使用DataFrame.shift僅在由Series.str.isdigit過濾的TWO列中使用數字的行,最后重新分配原始第一列:

orig = df['ONE'].copy()
mask = df['TWO'].astype(str).str.isdigit()

df[mask] = df[mask].shift(-1, axis=1)
df['ONE'] = orig

print (df)

                                                   ONE TWO THREE  \
483  topoff.pgw-s5s8.epgAMD02.node.epc.mnc005.mcc40...  IN     A   
484  topoff.sgw-s5s8.epgAMD02.node.epc.mnc005.mcc40...  IN     A   
486  topoff.pgw-s5s8.epgAMD03.node.epc.mnc005.mcc40...  IN     A   
487  topoff.sgw-s5s8.epgAMD03.node.epc.mnc005.mcc40...  IN     A   
489  topoff.pgw-s5s8.epgAMD06.node.epc.mnc005.mcc40...  IN     A   
490  topoff.sgw-s5s8.epgAMD06.node.epc.mnc005.mcc40...  IN     A   
492  topoff.pgw-s5s8.epgAMD07.node.epc.mnc005.mcc40...  IN     A   
493  topoff.sgw-s5s8.epgAMD07.node.epc.mnc005.mcc40...  IN     A   
495  topoff.pgw-s5s8.epgAMRELICLOUD.node.epc.mnc005...  IN     A   
496  topoff.sgw-s5s8.epgAMRELICLOUD.node.epc.mnc005...  IN     A   
498  topoff.pgw-s5s8.epgBARODACLOUD.node.epc.mnc005...  IN     A   
499  topoff.sgw-s5s8.epgBARODACLOUD.node.epc.mnc005...  IN     A   
501  topoff.pgw-s5s8.epgBHUJCLOUD.node.epc.mnc005.m...  IN     A   
502  topoff.sgw-s5s8.epgBHUJCLOUD.node.epc.mnc005.m...  IN     A   
503  topoff.pgw-s5s8.epgDL02.node.epc.mnc005.mcc404...  IN     A   
505  topoff.pgw-s5s8.epgGODHRACLOUD.node.epc.mnc005...  IN     A   
506  topoff.sgw-s5s8.epgGODHRACLOUD.node.epc.mnc005...  IN     A   

              FOUR FIVE  SIX  SEVE  EIGH  NINE  TEN  ELEV  
483    203.88.1.58  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
484   10.169.19.89  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
486    203.88.3.11  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
487   10.169.18.16  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
489    203.88.1.49  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
490   203.88.2.190  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
492   203.88.4.132  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
493   203.88.2.190  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
495  112.110.84.25  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
496  112.110.84.29  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
498   203.88.4.156  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
499    203.88.16.7  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
501  112.110.84.35  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
502  112.110.84.39  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
503    203.88.1.37  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
505  112.110.84.20  NaN  NaN   NaN   NaN   NaN  NaN   NaN  
506  112.110.84.24  NaN  NaN   NaN   NaN   NaN  NaN   NaN  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM