我从 execl(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)
最佳答案
尝试在您的数据集上运行它。
#!/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)
据我了解,您的查询是获取行/元组 ID。循环内的 if 条件,以便将其从另一个数据帧中删除。我所知道的最简单的方法是使用 zip 函数来使其与数据并行迭代。
此外,您还需要在删除行/列时保存数据框以便观察更改!
我检查了 rid!=0 因为 diff() 给出的第一个元素为 NaN,您可以应用任何适当的条件。
关于python - pandas - 如何添加带索引的行并比较数据的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55586863/