删除重复数据 Python
Posted
技术标签:
【中文标题】删除重复数据 Python【英文标题】:Deleting Repeating Data Python 【发布时间】:2019-02-24 18:47:34 【问题描述】:我有一个巨大的房间网状流分布数据库。但问题是网格太小了,所以它们中的某些部分是无用的,并且对我来说很难计算。在我的每个网格长度的 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,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]
【问题讨论】:
您需要在此处添加示例数据和预期输出。其次 (0.00385%0.00128) 没有给出绝对零……它接近于零但不是精确的零。看看这是否有效 trainProcessed = trainProcessed[round(trainProcessed[:,4]%0.00128,0)==0.0] 补充细节,谢谢。 【参考方案1】:对于这种情况和函数取模,我将使用小数:
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 猜测它是因为这些值有超过 5 个浮点数,所以它们不能完全与 0.00128 整除。例如:我有 0.0038399928829 。我尝试通过将数据帧转换为 numpy 数组将它们四舍五入为 5 个浮点数,然后返回数据帧并应用过滤器,但这使得所有值都等于零 唯一的解决方案是正确舍入您的数据,然后将所有数据乘以 10 的幂以获得整数,然后模数就可以了 如果这个答案对你有帮助,请不要忘记 uvpvote/validate the answer!!以上是关于删除重复数据 Python的主要内容,如果未能解决你的问题,请参考以下文章
如何根据python中的多个条件对excel文件进行重复数据删除?
Python - 重复数据删除问题:TypeError:不可散列的类型:'numpy.ndarray'