python - Pandas groupby(+15 分钟运行时间)
问题描述
我正在尝试使用 +1.000.000 个数据包分析网络流量数据集,并且我有以下代码:
pcap_data = pd.read_csv('/home/alexfrancow/AAA/data1.csv')
pcap_data.columns = ['no', 'time', 'ipsrc', 'ipdst', 'proto', 'len']
pcap_data['info'] = "null"
pcap_data.parse_dates=["time"]
pcap_data['num'] = 1
df = pcap_data
df
%%time
df['time'] = pd.to_datetime(df['time'])
df.index = df['time']
data = df.copy()
data_group = pd.DataFrame({'count': data.groupby(['ipdst', 'proto', data.index]).size()}).reset_index()
pd.options.display.float_format = '{:,.0f}'.format
data_group.index = data_group['time']
data_group
data_group2 = data_group.groupby(['ipdst','proto']).resample('5S', on='time').sum().reset_index().dropna()
data_group2
我导入 .csv 运行时脚本的第一部分是 5 秒,但是当 pandas groupby IP + PROTO,并以 5s 重新采样时间时,运行时间是 15 分钟,有谁知道我怎样才能获得更好的性能?
编辑:
现在我正在尝试使用dask,并且我有以下代码:
导入 .csv
filename = '/home/alexfrancow/AAA/data1.csv'
df = dd.read_csv(filename)
df.columns = ['no', 'time', 'ipsrc', 'ipdst', 'proto', 'info']
df.parse_dates=["time"]
df['num'] = 1
%time df.head(2)
按 ipdst + proto 按 5S 频率分组
df.set_index('time').groupby(['ipdst','proto']).resample('5S', on='time').sum().reset_index()
如何按IP+PROTO按5S频率分组?
解决方案
我尝试简化您的代码,但如果大型 DataFrame 性能应该只会好一点:
pd.options.display.float_format = '{:,.0f}'.format
#convert time column to DatetimeIndex
pcap_data = pd.read_csv('/home/alexfrancow/AAA/data1.csv',
parse_dates=['time'],
index_col=['time'])
pcap_data.columns = ['no', 'time', 'ipsrc', 'ipdst', 'proto', 'len']
pcap_data['info'] = "null"
pcap_data['num'] = 1
#remove DataFrame constructor
data_group = pcap_data.groupby(['ipdst', 'proto', 'time']).size().reset_index(name='count')
data_group2 = (data_group.set_index('time')
.groupby(['ipdst','proto'])
.resample('5S')
.sum()
.reset_index()
.dropna())
推荐阅读
- git - 如果一个或多个遥控器已经存在,则无法在 GitKraken 中添加新的 GitLab 遥控器
- python-poetry - 多模块应用程序中的 Python 诗歌和正确导入
- image - 在 RGB 通道而不是最终图像上应用 Delaunay 三角剖分
- javascript - 如何在 webpacker rails 6 中使用 chart.js
- python - 如何解决 Python:IndexError:列表索引超出范围?
- javascript - 无法使用备忘录解决浪费的重新渲染
- python - 使用 S3 和 Python 将 gz 转换为 zip
- node.js - 当我尝试更新不在架构中的字段并且未显示任何错误时,我在邮递员中收到 200 响应
- visual-studio-code - 如何禁用打开默认 vscode 终端
- postgresql - 有时会得到不正确的喜欢和不喜欢的总数