首页 > 解决方案 > 删除 n 行并在数据框中迭代 n 次

问题描述

我在 txt 文件中有 3100 万个值。我需要删除 21600 到 61200 之间的值,这是我通过下面的代码完成的,现在我必须使用这个逻辑来删除上述指定值之间的每个 86400 值。这意味着删除 21600+86400 到 61200+86400 之间的值,然后删除 21600+86400+86400 到 61200+86400+86400 等等,应用相同的逻辑直到数据结束。我尝试了很多选项,甚至使用链表,但我无法将其应用于我的大型数据集。该怎么做?

值 1 到 24 的可视化示例,删除从 6 到 `17 的值:

1 2 3 4 5 6 - - - - - - - - - - 17 18 19 20 21 22 23 24

然后应用到下一组遵循以下结构的行(开始 6+24=30 和停止 17+24=41):

25 26 27 28 29 30 - - - - - - - - - - 41 42 43 44 45 46 47 48

依此类推,直到数据结束(删除 30+24 和 41+24 之间的数据以用于下一组)。

为简单起见,我将以下代码限制为前 250000 个值。

import numpy as np
import pandas as pd

sample = np.arange(0, 259201, 1).tolist()
df = pd.DataFrame(sample)

df = df.drop(df.index[21601:61200])

基本上,我需要在下面应用类似这样的东西,但我不知道如何为我的情况做这件事。

for day in reverse(range(366)):
    df.drop(df.index[21601+day*86400:61200+day*86400])

标签: python-3.xpandas

解决方案


您可以使用模运算符来执行此操作(%python 和 pandas 中的符号)。

以下是如何重写最后一段代码:

df[~(df.index.to_series() % 86400).between(21601, 61200)]

我使用了to_series()因为between()没有为索引对象定义。


推荐阅读