Python警告混乱



我有以下代码,用于关联从PgSQL引入的数据。

if wd is not None and dd is not None:
alldata=np.concatenate((wd,dd))
alldat_df=pd.DataFrame(alldata, index=None, columns=['datetime','rain', 'raindiff'])
alldat_df.drop(alldat_df.loc[2708:2738].index, inplace=True)
alldata=np.array(alldat_df)
alldata[0,2]=0
mask = (alldat_df['datetime'] > fdate) & (alldat_df['datetime'] <= tdate)
ndf=alldat_df.loc[mask]
ndf.loc[0,['raindiff']]=0
ndf.index=ndf['datetime']
ndf.drop(columns=['datetime'], inplace=True)
davisdfnew=ndf.resample(bs, offset=bs, origin=fdate).sum()
davisdfnew.rename(columns={'rain':'rain sum','raindiff':'raindiff sum'}, inplace=True)

if dd is None:
alldat_df=pd.DataFrame(wd, index=None, columns=['datetime', 'rain', 'raindiff'])
mask = (alldat_df['datetime'] > fdate) & (alldat_df['datetime'] <= tdate)
ndf=alldat_df.loc[mask]
ndf.loc[0,['raindiff']]=0
ndf.index=ndf['datetime']
ndf.drop(columns=['datetime'], inplace=True)
davisdfnew=ndf.resample(bs, offset=bs, origin=fdate).sum()
davisdfnew.rename(columns={'rain':'rain sum','raindiff':'raindiff sum'}, inplace=True)

if wd is None:
alldat_df=pd.DataFrame(dd, index=None, columns=['datetime', 'rain', 'raindiff'])
mask = (alldat_df['datetime'] > fdate) & (alldat_df['datetime'] <= tdate)
ndf=alldat_df.loc[mask]
ndf.loc[0,['raindiff']]=0
ndf.index=ndf['datetime']
ndf.drop(columns=['datetime'], inplace=True)
davisdfnew=ndf.resample(bs, offset=bs, origin=fdate).sum()
davisdfnew.rename(columns={'rain':'rain sum','raindiff':'raindiff sum'}, inplace=True)

当它运行时,如果满足前两个条件,它会发出以下警告

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
ndf.loc[0,['raindiff']]=0

但是当满足条件CCD_ 1时没有警告在所有情况下,ndf.loc[0,['raindif']]处的值都是无类型对象

如果有人能阐明这一点,我将不胜感激!

根据@john giorgio评论编辑

wd=

array([[datetime.datetime(2021, 5, 20, 10, 45), 0.0, None],
[datetime.datetime(2021, 5, 20, 11, 0), 0.0, 0.0],
[datetime.datetime(2021, 5, 20, 11, 15), 0.0, 0.0],
...,
[datetime.datetime(2021, 6, 17, 22, 30), 96.6, 0.0],
[datetime.datetime(2021, 6, 17, 22, 45), 96.6, 0.0],
[datetime.datetime(2021, 6, 17, 23, 0), 96.6, 0.0]], dtype=object)

dd=

array([[datetime.datetime(2021, 6, 17, 15, 30, 42), 96.6, None],
[datetime.datetime(2021, 6, 17, 15, 35, 42), 96.6, 0.0],
[datetime.datetime(2021, 6, 17, 15, 40, 42), 96.6, 0.0],
...,
[datetime.datetime(2021, 6, 30, 23, 45, 41), 113.8, 0.0],
[datetime.datetime(2021, 6, 30, 23, 50, 41), 113.8, 0.0],
[datetime.datetime(2021, 6, 30, 23, 55, 41), 113.8, 0.0]],
dtype=object)

正如我所说,当单词存在时,就会出现错误。如果wd和dd都存在,则将它们组合在一起,并删除重复的日期时间以获得ndf。如果只有wd存在ndf是由它形成的,那么在这两种情况下都会发生错误。

如果只有dd存在,则ndf由此形成,并且错误不会发生

在执行任何其他操作之前,您可以尝试在每次对原始数据集进行子采样时重置索引.reset_index(drop=True)

最新更新