我有一个这样的数据框
A B
2018-02-01 00:00:00 5.592860 2.789900
2018-02-01 00:15:00 5.288981 2.054017
2018-02-01 00:30:00 5.319665 2.232686
2018-02-01 00:45:00 5.198657 2.236154
2018-02-01 01:00:00 5.018134 2.064312
A列将没有任何缺失值,但B列将具有。
我还有另一个这样的列表,长度为12,称为预报
[0.09545173 0.09946214 0.10596157 0.12075519 0.14446978 0.16848372
0.20479251 0.23742175 0.26723814 0.29389328 0.30628437 0.3140854 ]
我想遍历数据帧中的每一行,并检查接下来的12行是否有任何nan
。如果存在nan
,请从列表中的相应索引中替换该值。
如果当前索引的第二行是nan
,则将nan
替换为forecasts[2]
为了使事情更清楚
我将有一个数据框,其中包含我说过的问题的数据。列B中可能有未命中的地方,但列A中没有。我将为每个时间戳列出12个位置。名为预报的列表将在Forecast [0]中具有当前时间戳的预测值,而在Forecast [11]中具有从现在开始的第11个时间戳。我想遍历数据集中的每个时间戳,请检查B列中数据帧的下12个位置是否存在任何难点。
如果有南,则将其替换为预测。
如何用熊猫轻松做到这一点??
答案 0 :(得分:2)
您可以使用:
import pandas as pd
import numpy as np
temp=u"""A;B
2018-02-01 00:00:00;5.592860;2.789900
2018-02-01 00:15:00;5.288981;NaN
2018-02-01 00:30:00;5.319665;2.232686
2018-02-01 00:45:00;5.198657;2.236154
2018-02-01 01:00:00;5.018134;2.064312
2018-02-01 01:15:00;5.018134;NaN
"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep=";", parse_dates=True)
print (df)
A B
2018-02-01 00:00:00 5.592860 2.789900
2018-02-01 00:15:00 5.288981 NaN
2018-02-01 00:30:00 5.319665 2.232686
2018-02-01 00:45:00 5.198657 2.236154
2018-02-01 01:00:00 5.018134 2.064312
2018-02-01 01:15:00 5.018134 NaN
L = [0.09545173, 0.09946214, 0.10596157]
r = int(len(df) / len(L))
print (r)
2
s = pd.Series(np.tile(np.array(L), r), index=df.index)
print (s)
2018-02-01 00:00:00 0.095452
2018-02-01 00:15:00 0.099462
2018-02-01 00:30:00 0.105962
2018-02-01 00:45:00 0.095452
2018-02-01 01:00:00 0.099462
2018-02-01 01:15:00 0.105962
dtype: float64
df['B'] = df['B'].fillna(s)
print (df)
A B
2018-02-01 00:00:00 5.592860 2.789900
2018-02-01 00:15:00 5.288981 0.099462
2018-02-01 00:30:00 5.319665 2.232686
2018-02-01 00:45:00 5.198657 2.236154
2018-02-01 01:00:00 5.018134 2.064312
2018-02-01 01:15:00 5.018134 0.105962
答案 1 :(得分:0)
或单线列表理解:
df['B'] = [l[i] if type(v)==type(np.nan) else v for i,v in enumerate(df['B'].tolist())]
答案 2 :(得分:-1)
这是处理或使用缺失或未知值的基本问题。 您可以使用 fillna()函数用所需的默认值填充缺失的值。
例如:如果df1是您的数据框,其中包含多个列中的缺失值。
for column in df1:
print("column ",column)
df1[column] = df1[column].fillna(0.12345)
要检查 fillna 语法和示例,请检查https://kite.com/python/docs/pandas.core.frame.DataFrame.fillna
您还可以使用熊猫 isna()函数检查缺少值的地方。