首页 > 解决方案 > pandas - 如何添加带索引的行并比较数据的差异?

问题描述

我从 excecl(csv) 带来了数据,大约 300000 行 * 1 列,我用 db.plot() 绘制 ----- 这是一个时间序列数据

我正在尝试删除(删除)高于 0.006 的数据,然后

我想比较数据之间的差异(逐步:彼此相邻的那个),如果差异更大 0.00001,我也想删除这些数据。

然后,我将只剩下差异非常低的数据(几乎为 0,平坡)。

我是python的初学者,我尽力了,但我不知道我的代码有什么问题:

import pandas as pd

excel_df = pd.read_csv('data.csv', header=None)

excel_df.plot()

bool_idx = excel_df < 0.006

valid_data = excel_df[bool_idx]

true_data = valid_data.dropna()

# print(true_data)
# print(valid_data)

ax1 = valid_data.plot()

ax1.set_ylim(-0.005, 0.045)

ax1.plot()

print(true_data)

al2 = true_data.diff()

# print(al2)

number = 0

for true_data in ture data:

    number = number + 1

    if true_data.diff() < 0.00001:

        true_data.drop()

print(true_data)

标签: python

解决方案


尝试在您的数据集上运行它。

#!/usr/bin/env python3
# coding: utf-8

# In[1]:


import pandas as pd

excel_df = pd.read_csv('data.csv', header=None)

x=excel_df.plot()
# x

bool_idx = excel_df < 0.006
# bool_idx

valid_data = excel_df[bool_idx]
# valid_data

true_data = valid_data.dropna()
# true_data

ax1 = valid_data.plot()

ax1.set_ylim(-0.005, 0.045)
# ax1


al2 = true_data.diff()
# al2

number = 0

for (true_data_diff_val,rid) in zip(true_data.diff()[0],true_data.diff()[0].index):
#     print(number,true_data_diff_val)
#     print(rid)
    if true_data_diff_val < 0.00001 and rid != 0:
        true_data=true_data.drop(int(rid),0)
        print(rid)
print(true_data)

您对我的理解的查询是在循环内的 if 条件中获取行/元组 ID,以便将其从另一个数据帧中删除。我知道的最简单的方法是使用zip函数与数据并行迭代。

此外,您需要在删除行/列时保存数据框以观察更改!

我检查了rid!=0因为 diff() 将第一个元素作为 NaN,您可以应用任何适当的条件。


推荐阅读