【问题标题】:How to limit NaN filling in pandas dataframe如何限制 NaN 填充 pandas 数据框
【发布时间】:2014-09-03 15:11:22
【问题描述】:

我有三个熊猫数据框,其中包含三种类型的索引 15 分钟周期、1 分钟和 15 秒,我在随后的数据框中添加了NaNs,并在同一图中绘制了主题。

图表:

现在我想替换一个数据框 NaNs ,我使用了 ffill(),它工作但我需要限制填充 NaN,我不需要我标记为红色的内容。

图2:

我的情节应该是这样的:


(来源:noaa.gov

数据框:

http://bayanbox.ir/id/1324113030042053806?download

http://bayanbox.ir/id/774076250887409862?download

http://bayanbox.ir/id/6217190851751601245?download

来源:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 1 minutes recorded data
data = pd.read_csv('1m.csv', parse_dates=True, index_col='time')
# 15 minutes recorded data
data2 = pd.read_csv('15m.csv', parse_dates=True, index_col='time')
# 15 seconds recorded data
data3 = pd.read_csv('15s.csv', parse_dates=True, index_col='time')

del data['Unnamed: 0'], data2['Unnamed: 0'], data3['Unnamed: 0']

def add_nan(DF, T):
    start = DF.time[len(DF)-1]
    stop = DF.time[0]
    rng = pd.date_range(start, stop, freq=T)
    DF = DF.drop_duplicates('time').set_index('time').reindex(rng)
    return DF

data = pd.DataFrame({"1-min":np.array(data.Height[:]), "time":data.index})
data2 = pd.DataFrame({"15-min":np.array(data2.Height[:]), "time":data2.index})
data3 = pd.DataFrame({"15-sec":np.array(data3.Height[:]), "time":data3.index}) 

data = add_nan(data, '1min')
data2 = add_nan(data2, '15min')
data3 = add_nan(data3, '1S')

ax = data.plot(color='g', figsize=(10, 6))
data2.plot(ax=ax, color='b')
data3.plot(ax=ax, style='.-r')

plt.savefig('plot.png')

【问题讨论】:

  • “没有显示正确的情节”是什么意思?如果您缺少数据(以NaNs 的形式,那么它不会绘制任何内容。
  • “data2”数据框有问题,该图应该看起来像 NOAA 图,我认为 'NaN's 比它应该的要多

标签: python matplotlib pandas


【解决方案1】:

根据熊猫documentation,limit参数应该设置True

DataFrame.ffill(axis=0, inplace=False, limit=None, downcast=None)
Synonym for NDFrame.fillna(method=’ffill’)

这是将NaN数据添加到数据帧的功能,用于限制NaN填充limit=True应在数据帧中设置:

def add_nan(DF, T):
    start = DF.time[len(DF)-1]
    stop = DF.time[0]
    rng = pd.date_range(start, stop, freq=T)
    DF = DF.drop_duplicates('time').set_index('time').reindex(rng)
    return DF.ffill(limit=True)

【讨论】:

    猜你喜欢
    • 2020-06-27
    • 1970-01-01
    • 2017-03-11
    • 2014-03-15
    • 2022-01-07
    • 2022-01-20
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多