【问题标题】:How do I drop p rows every n rows of a pandas dataframe?如何在 pandas 数据帧的每 n 行中删除 p 行?
【发布时间】:2021-04-13 10:40:24
【问题描述】:

我有一个读取数据的代码,但是每 2000 行有大约 10 个标题行我想跳过。

我已经写了下面的代码:

import pandas as pd
    
data = pd.read_csv('variance meting_2millsamples.lvm', delimiter= '\t',
names = ['t','V'], skiprows=11)

#data = data.drop(labels=range(0, 11), axis=0)
data = data.drop(labels=range(2000,2010), axis=0)
data = data.drop(labels=range(4010,4020),axis=0)
data = data.drop(labels=range(6020,6030),axis=0)
data = data.drop(labels=range(8030,8040),axis=0)
data = data.drop(labels=range(10040,8050),axis=0)
data = data.drop(labels=range(12050,12060),axis=0)
data = data.drop(labels=range(14060,12070),axis=0)
data = data.drop(labels=range(16070,12080),axis=0)

但是,我的数据框大约有 1400 万个数据点长。我试过使用for 循环,但我无法让它工作。我怎样才能创建一个自动丢弃的for 循环?

有没有更好的方法来忽略/删除线条?

【问题讨论】:

    标签: python pandas dataframe for-loop


    【解决方案1】:

    应该这样做,相应地在range(1,len(data)//2000) 中设置限制。

    chain(*iterables) 将可迭代对象作为其参数(因此范围列表前面的星号运算符)并将它们连接起来。

    from itertools import chain
    cc = chain(*(range(2000*k+10*(k-1), 2010*k) for k in range(1,len(data)//2000)))
    data = data.drop(labels=cc, axis=0)
    

    【讨论】:

    • 感谢您的成功!也感谢您的编辑。本来会给你投票的,但由于还没有 15 业力,所以不能投票。
    • 很高兴它有帮助!您可以通过单击投票按钮旁边的勾选来接受此解决方案。
    • 如何查看 cc 中的值? list(cc) 产生 []
    【解决方案2】:
    for i in range(0,data.shape[0],2000):
      data = data.drop(labels=range(i,i+10), axis=0)
    
    

    你可以这样做,虽然我不确定它是否更有效

    【讨论】:

      猜你喜欢
      • 2022-07-28
      • 2021-12-19
      • 1970-01-01
      • 2022-06-24
      • 2016-09-24
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多