setingwithcopywarning使用日期时间索引



首先,我知道有一些主题有相同的标题,但他们提出的问题并不完全相同,所以我想我会写我自己的。

我有一个datetime索引数据框架,它工作得很好。

但是我尝试通过使用for循环来实现一些新的列,它给了我上面的消息:

SettingWithCopyWarning:一个值正试图在一个副本上设置从DataFrame

我当然搜索它,发现它是调用链索引。我所做的代码仍然可以工作,但我知道这不是最好的方法,所以我在这里寻求建议。

其中一个例子是当我尝试创建新的列,指示一天中的部分。下面是我使用的代码:

def get_part_of_day(hour):
return (
"morning" if 5 <= hour <= 11
else
"afternoon" if 12 <= hour <= 17
else
"evening" if 18 <= hour <= 22
else
"night"
)
df['part_of_day'] = df['hour'].map(get_part_of_day)
df['morning']=""
for i in range (len(df)):
if  df['part_of_day'][i]=='morning':
df['morning'][i]=1
else :
df['morning'][i]=0
df['afternoon']=""
for i in range (len(df)):
if  df['part_of_day'][i]=='afternoon':
df['afternoon'][i]=1
else :
df['afternoon'][i]=0

df['evening']=""
for i in range (len(df)):
if  df['part_of_day'][i]=='evening':
df['evening'][i]=1
else :
df['evening'][i]=0

df['night']=""
for i in range (len(df)):
if  df['part_of_day'][i]=='night':
df['night'][i]=1
else :
df['night'][i]=0

当我尝试任何df['example'][I]=number

时,我得到警告消息我看到文档说使用。loc或。at,但当我使用日期时间索引时,这不是很容易做到…

有人有什么解决办法吗?

祝大家过得愉快

替换所有的:

df['morning'][i]=1

:

df.loc['morning', i]=1

对于所有df[<col name>][i]赋值。

相关内容

最新更新