如何将Netstat数据DataFrame中空值行内容移至前一行新增列?
处理Netstat数据:将进程名合并到对应数据行
解决方案代码
假设你使用pandas处理数据,以下是高效处理大量Netstat数据的方法:
import pandas as pd import numpy as np # 模拟你的原始Netstat DataFrame(替换成你实际的数据) data = { 'Proto': ['TCP', 'chrome.exe', 'TCP', 'firefox.exe', 'UDP', 'svchost.exe'], 'Local Address': ['127.0.0.1:80', np.nan, '192.168.1.2:443', np.nan, '0.0.0.0:53', np.nan], 'Foreign Address': ['0.0.0.0:0', np.nan, '8.8.8.8:443', np.nan, '*:*', np.nan], 'State': ['LISTEN', np.nan, 'ESTABLISHED', np.nan, np.nan, np.nan] } df = pd.DataFrame(data) # 1. 标记仅第一列有值、其余列全空的行(进程名行) process_rows = df.iloc[:, 1:].isna().all(axis=1) # 2. 新增Process_name列,将进程名行的内容移到前一行 df['Process_name'] = df['Proto'].where(process_rows).shift(-1) # 3. 过滤掉无用的进程名行,重置索引 df_clean = df[~process_rows].reset_index(drop=True)
代码解释
- 标记进程名行:
df.iloc[:,1:].isna().all(axis=1)检查除第一列外的所有列是否全为空,返回布尔值Series,精准标记出仅存进程名的行。 - 转移进程名:
df['Proto'].where(process_rows)只保留进程名行的Proto值,其余位置设为NaN;shift(-1)将这些进程名向上移动一行,直接对应到前面的有效Netstat数据行。 - 清理数据:通过
~process_rows过滤掉无用的进程名行,reset_index重置索引保证数据结构整齐,最终得到每行包含完整Netstat数据+对应进程名的结构。
边界情况处理
- 如果第一行就是无对应数据的进程名行,代码会自动忽略该行(过滤后不会保留无效数据)。
- 若存在连续多个进程名行,代码会将最后一个进程名对应到前面的有效行(规范数据结构下不会出现此情况)。
内容的提问来源于stack exchange,提问作者Zarif Rahman
相关产品推荐
相关产品推荐

