首页 > 解决方案 > 使用 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
                                                   一二三四五六七八九十级
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... 在 203.88.3.11 NaN NaN NaN NaN NaN NaN NaN
487 topoff.sgw-s5s8.epgAMD03.node.epc.mnc005.mcc40... 在 10.169.18.16 南南南南南南南南南
489 topoff.pgw-s5s8.epgAMD06.node.epc.mnc005.mcc40... 在 203.88.1.49 NaN NaN NaN NaN NaN NaN NaN
490 topoff.sgw-s5s8.epgAMD06.node.epc.mnc005.mcc40... 在 203.88.2.190 NaN NaN NaN NaN NaN NaN NaN
492 topoff.pgw-s5s8.epgAMD07.node.epc.mnc005.mcc40... 在 203.88.4.132 NaN NaN NaN NaN NaN NaN NaN
493 topoff.sgw-s5s8.epgAMD07.node.epc.mnc005.mcc40... 在 203.88.2.190 NaN NaN NaN NaN NaN NaN NaN
495 topoff.pgw-s5s8.epgAMRELICLOUD.node.epc.mnc005... 在 112.110.84.25 NaN NaN NaN NaN NaN
第496章 112.110.84.29 NaN NaN NaN NaN NaN NaN NaN
498 topoff.pgw-s5s8.epgBARODACLOUD.node.epc.mnc005... 在 203.88.4.156 南南南南南南南南南
第499章 203.88.16.7 NaN NaN NaN NaN NaN NaN NaN
501 topoff.pgw-s5s8.epgBHUJCLOUD.node.epc.mnc005.m... 在 112.110.84.35 NaN NaN NaN NaN
第502章 112.110.84.39 NaN NaN NaN NaN NaN NaN NaN
503 topoff.pgw-s5s8.epgDL02.node.epc.mnc005.mcc404... 在 203.88.1.37 NaN NaN NaN NaN NaN NaN NaN
505 topoff.pgw-s5s8.epgGODHRACLOUD.node.epc.mnc005... 在 112.110.84.20 南南南南南南
第506章 112.110.84.24 NaN NaN NaN NaN NaN NaN NaN

后过滤器我只需要一个和四个字段,其中存在数据,但前两个记录不在形状中。

需要以下输出。

                                                   一二三四五六七八九十级
483 topoff.pgw-s5s8.epgAMD02.node.epc.mnc005.mcc40... 在 203.88.1.58 NaN NaN NaN NaN NaN NaN
484 topoff.sgw-s5s8.epgAMD02.node.epc.mnc005.mcc40... 在 10.169.19.89 NaN NaN NaN NaN NaN NaN
486 topoff.pgw-s5s8.epgAMD03.node.epc.mnc005.mcc40... 在 203.88.3.11 NaN NaN NaN NaN NaN NaN NaN
487 topoff.sgw-s5s8.epgAMD03.node.epc.mnc005.mcc40... 在 10.169.18.16 南南南南南南南南南
489 topoff.pgw-s5s8.epgAMD06.node.epc.mnc005.mcc40... 在 203.88.1.49 NaN NaN NaN NaN NaN NaN NaN
490 topoff.sgw-s5s8.epgAMD06.node.epc.mnc005.mcc40... 在 203.88.2.190 NaN NaN NaN NaN NaN NaN NaN
492 topoff.pgw-s5s8.epgAMD07.node.epc.mnc005.mcc40... 在 203.88.4.132 NaN NaN NaN NaN NaN NaN NaN
493 topoff.sgw-s5s8.epgAMD07.node.epc.mnc005.mcc40... 在 203.88.2.190 NaN NaN NaN NaN NaN NaN NaN
495 topoff.pgw-s5s8.epgAMRELICLOUD.node.epc.mnc005... 在 112.110.84.25 NaN NaN NaN NaN NaN
第496章 112.110.84.29 NaN NaN NaN NaN NaN NaN NaN
498 topoff.pgw-s5s8.epgBARODACLOUD.node.epc.mnc005... 在 203.88.4.156 南南南南南南南南南

我已经尝试过 isdigit 和许多其他功能,但无法这样做。任何帮助都是合适的。

标签: pythonpandasdataframe

解决方案


想法是DataFrame.shift仅使用列中由数字TWO过滤的行Series.str.isdigit,最后重新分配原始第一列:

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  

推荐阅读