我的数据中存在NAN的线性内插问题.我有一些瞬时测量,我想从6分钟间隔重采样到5分钟间隔.

df = pd.DataFrame(zip(['10:00','10:06','10:12','10:18','10:24'],
                     [1, 2, 3, 0.5, 2.5], [0, np.nan, 5, 2.5, 10]),
                 columns=['date','column_a','column_b'])
df['date'] = pd.to_datetime(df['date'], infer_datetime_format=True)
df = df.set_index('date')

print(df)

                    column_a  column_b
date                                   
2023-07-19 10:00:00       1.0       0.0
2023-07-19 10:06:00       2.0       NaN
2023-07-19 10:12:00       3.0       5.0
2023-07-19 10:18:00       0.5       2.5
2023-07-19 10:24:00       2.5      10.0

我使用了这个代码,但在10:05应该是NaN而不是Value.谢谢你的帮助.

print(df.resample('1Min').interpolate(method='linear', limit=5).resample('5Min').asfreq())

                     column_a  column_b
date                                  
2023-07-19 10:00:00  1.000000  0.000000
2023-07-19 10:05:00  1.833333  2.083333 <--- here should be nan
2023-07-19 10:10:00  2.666667       NaN
2023-07-19 10:15:00  1.750000  3.750000
2023-07-19 10:20:00  1.166667  5.000000

推荐答案

这里df_6mindf

df_5min = []

# create list of 5 minute values in an hour
list_min5 = list(range(0, 60, 5))

# for each column get pandas data series of 5 min interval resampled with linear interpolation
for column in df_6min.columns:
    ds_5min = df_6min[column].resample('1Min').interpolate(method='linear').resample('5Min').asfreq()

    # for each index of 6 min interval check if there is nan
    for i in df_6min.index:
        if np.isnan(df_6min.loc[i, column]) == True:

            # if yes replace upper and lower index of 5 min by nan  
            for j in range(len(list_min5)):

                if list_min5[j-1] < i.minute < list_min5[j]:
                    ds_5min.loc[i.replace(minute=list_min5[j-1])] = np.nan
                    ds_5min.loc[i.replace(minute=list_min5[j])] = np.nan

                # if index is 0 minute or 30 minute, get j+1 index instead of j
                if list_min5[j-1] == i.minute:
                    ds_5min.loc[i.replace(minute=list_min5[j-1])] = np.nan
                    ds_5min.loc[i.replace(minute=list_min5[j+1])] = np.nan

    df_5min.append(ds_5min)  

df_5min = pd.concat(df_5min, axis=1)

Python相关问答推荐

DuckDB将蜂巢分区插入拼花文件

如何让我的Tkinter应用程序适合整个窗口,无论大小如何?

将HLS纳入媒体包

使用mySQL的SQlalchemy过滤重叠时间段

如果条件为真,则Groupby.mean()

使用SciPy进行曲线匹配未能给出正确的匹配

如何标记Spacy中不包含特定符号的单词?

为什么默认情况下所有Python类都是可调用的?

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

Pandas—在数据透视表中占总数的百分比

Python中的变量每次增加超过1

用渐近模计算含符号的矩阵乘法

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

寻找Regex模式返回与我当前函数类似的结果

从列表中获取n个元素,其中list [i][0]== value''

使用__json__的 pyramid 在客户端返回意外格式

如何使用Azure Function将xlsb转换为xlsx?

如何训练每一个pandaprame行的线性回归并生成斜率

比较两个有条件的数据帧并删除所有不合格的数据帧

在Pandas 中以十六进制显示/打印列?