开发者社区> 问答> 正文

熊猫的数据采集时间太长了

我在一个接近300k行的文件上运行下面的代码。我知道我的代码不是很有效率,因为它需要很长的时间来完成,谁能告诉我如何才能加快它?

import sys
import numpy as np
import pandas as pd


file = sys.argv[1]

df = pd.read_csv(file, delimiter=' ',header=None)
df.columns = ["ts", "proto", "orig_bytes", "orig_pkts", "resp_bytes", "resp_pkts", "duration", "conn_state"]

orig_bytes = np.array(df['orig_bytes'])
resp_bytes = np.array(df['resp_bytes'])


size = np.array([])
ts = np.array([])
for i in range(len(df)):
    if orig_bytes[i] > resp_bytes[i]:
        size = np.append(size, orig_bytes[i])
        ts = np.append(ts, df['ts'][i])
    else:
        size = np.append(size, resp_bytes[i])
        ts = np.append(ts, df['ts'][i])

目标是只记录两个实例中较大的一个(orig_bytes或resp_bytes)。 谢谢你们所有人的帮助 问题来源StackOverflow 地址:/questions/59381664/pandas-dataframe-takes-too-long

展开
收起
kun坤 2019-12-27 17:55:38 567 0
1 条回答
写回答
取消 提交回答
  • 我不能保证它会比你现有的跑得快,但它是一条更直接的路线,你可以去你想去的地方。另外,我假设基于你的例子,你不想让两个字节值相等的实例,你想要一个单独的DataFrame在最后,而不是一个新的列在现有的df: 在您创建了DataFrame并对列进行了重命名之后,您可以使用query删除所有orig_bytes和resp_bytes相同的实例,创建一个具有这两个最大值的新列,然后将DataFrame缩小到您想要的两个列。

    df = pd.read_csv(file, delimiter=' ',header=None)
    df.columns = ["ts", "proto", "orig_bytes", "orig_pkts", "resp_bytes", "resp_pkts", "duration", "conn_state"]
    
    df_new = df.query("orig_bytes != resp_bytes")
    df_new['biggest_bytes'] = df_new[['orig_bytes', 'resp_bytes']].max(axis=1)
    df_new = df_new[['ts', 'biggest_bytes']]
    

    如果您确实希望在它们彼此相等的地方包含条目,那么只需跳过查询步骤。

    2019-12-27 18:08:16
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
云端设计,与时间赛跑 立即下载
亿级社交短视频播放实战 立即下载
熊猫直播的流量调度系统 立即下载