删除Python中的重复数据

删除Python中的重复数据,python,pandas,numpy,bigdata,Python,Pandas,Numpy,Bigdata,我有一个巨大的数据库,里面有沿着一个房间的网状流动分布。但问题是网格太小,所以其中的一些部分是无用的,这使得我的计算很困难。在我的y轴上,每个网格长度的尺寸是0.00032。我的y维度从0到0.45。正如你所理解的,有很多无用的数据 我想通过删除不可除以0.00128的行,使每网格长度等于0.00128,如何做到这一点 trainProcessed = trainProcessed[trainProcessed[:,4]%0.00128==0] 我已经尝试过这行代码(trainProcesse

我有一个巨大的数据库,里面有沿着一个房间的网状流动分布。但问题是网格太小,所以其中的一些部分是无用的,这使得我的计算很困难。在我的y轴上,每个网格长度的尺寸是0.00032。我的y维度从0到0.45。正如你所理解的,有很多无用的数据

我想通过删除不可除以0.00128的行,使每网格长度等于0.00128,如何做到这一点

trainProcessed = trainProcessed[trainProcessed[:,4]%0.00128==0]
我已经尝试过这行代码(trainProcessed是我作为numpy数组的数据),但是它像0->0.00128->0.00256->0.00512。但是有些行的值为0.00384,也可以除以0.00128。顺便说一下,数组的形状是(888300,8)

示例数据:

X:[0,0,0,0.00031999,0.00031999,0.00063999,0.00064,0.00096,0.00096,0.000128,0.000128]

示例输出:

X:[0,0,0,0,0.000128,0.000128]


对于这种情况和函数模,我将使用十进制:

import pandas as pd
from decimal import Decimal
df = pd.DataFrame({'values': [0.00128, 0.00384, 0.367, 0.128, 0.34]})
print(df)

#convert float to str then Decimal and apply the modulo
#keep only rows which are dividable by 0.00128
filter = df.apply(lambda r: Decimal(str(r['values'])) % Decimal('0.00128')  == Decimal('0') ,axis=1)

#if data are smaller you could multiply by power of 10 before modulo
#filter = df.apply(lambda r: Decimal(str(r['values'] * 1000)) % Decimal('0.00128')  == Decimal('0') ,axis=1)
df=df[filter].reset_index(drop=True)

#the line: df=df[~filter].reset_index(drop=True) does the (not filter)
print(df)
初始输出:

    values
0  0.00128
1  0.00384
2  0.36700
3  0.12800
4  0.34000
最终产量

    values
0  0.00128
1  0.00384
2  0.12800

您需要在此处添加示例数据和预期输出。其次(0.00385%0.00128)没有给出绝对零……它接近零,但不是精确零。看看这是否有效trainProcessed=trainProcessed[round(trainProcessed[:,4]%0.00128,0)==0.0]添加了详细信息,谢谢。在我的例子中,这使得所有的值都等于零,这是因为这些值有5个以上的浮点,所以它们不能与0.00128完全分开。例如:我有0.0038399928829。我尝试通过将dataframe转换为numpy数组将它们四舍五入为5个浮点,然后返回dataframe并应用过滤器,但这使所有值都等于零。唯一的解决方案是正确地对数据进行四舍五入,并按10的幂进行多重运算,以获得整数和模。如果这个答案对您有帮助,请,别忘了uvpvote/验证答案!!