Pandas,设置在 DataFrame 问题的切片副本上

一段时间以来,我一直在为 Pandas 警告而苦苦挣扎。


我有这段非常简单的代码:


def get_delta(df): 

    df['delta_current_day'] = df['close'] - df['open']

    df = df[pd.notnull(df['delta_current_day'])]


    df['delta_next_day'] = df['delta_current_day'].shift(-1)


    return df

每次我收到此错误时:


试图在 DataFrame 中的切片副本上设置一个值。尝试改用 .loc[row_indexer,col_indexer] = value


我在stackoverflow上阅读了很多关于它的问题,但没有一个对我有用。我试过这样的事情:


 df.loc[:, 'delta_next_day'] = df['delta_current_day'].shift(-1)


# OR 

list = df['delta_current_day'].tolist()

df.loc[:, 'delta_next_day'] = list[:1]

但我仍然得到同样的错误。


我究竟做错了什么?


慕容3067478
浏览 98回答 2
2回答

慕工程0101907

我认为你需要DataFrame.copy:df = df[pd.notnull(df['delta_current_day'])].copy()#df = df.loc[pd.notnull(df['delta_current_day'])] #or thisdf['delta_next_day'] = df['delta_current_day'].shift(-1)这是一片:df = df[pd.notnull(df['delta_current_day'])]A ( df['delta_current_day'].shift(-1)) 值正试图在df[pd.notnull(df['delta_current_day'])]DataFrame 中切片的 ( ) 副本上设置

哔哔one

你也可以试试这个:# Sample data.df = pd.DataFrame({    'open': [100, 102, np.nan, 102],    'close': [101.5, 102.5, np.nan, 104]})def get_delta(df):    df = df.dropna().assign(delta_current_day=df.eval('close - open'))    return df.assign(delta_next_day=df['delta_current_day'].shift(-1))>>> get_delta(df)    open  close  delta_current_day  delta_next_day0  100.0  101.5                1.5             0.51  102.0  102.5                0.5             2.03  102.0  104.0                2.0             NaN当然,这会引入前瞻偏差。为什么你今天使用明天的 delta?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python