【Dataframe warning】Try using .loc[row_indexer,col_indexer] = value instead
使用dataframe直接赋值操作时
df['当前日期'] = datetime.date.today()
会出现下面的警告信息
Try using .loc[row_indexer,col_indexer] = value instead
虽然得到的最终结果是正常的,可是为什么会出现上面的警告呢?
因为上面的操作如果稍微复杂点,那么就可能导致赋值失败。 因为中间会产生一个切片的临时副本。
比如:
如果想把A列中大于5的数换成100,如何操作 ?
df[df.A > 5]['A'] = 1000
上面的这个表达式是不会生效的。
要生效,需要写成以下:
df.loc[df.A > 5, 'A'] = 1000
为什么呢?
因为df[df.A]得到是一个临时切片结果,等于一个中间变量,然后在这个中间变量上的A列上做赋值操作,但是最原始的df却没有被改变。
或者你可以这样写
df=df[df.A>5]
df.A=1000
df['当前日期'] = datetime.date.today()
会出现下面的警告信息
Try using .loc[row_indexer,col_indexer] = value instead
虽然得到的最终结果是正常的,可是为什么会出现上面的警告呢?
因为上面的操作如果稍微复杂点,那么就可能导致赋值失败。 因为中间会产生一个切片的临时副本。
比如:
df
A B C D E
0 5 0 3 3 7
1 9 3 5 2 4
2 7 6 8 8 1
如果想把A列中大于5的数换成100,如何操作 ?
A B C D E
0 5 0 3 3 7
1 1000 3 5 2 4
2 1000 6 8 8 1
df[df.A > 5]['A'] = 1000
上面的这个表达式是不会生效的。
要生效,需要写成以下:
df.loc[df.A > 5, 'A'] = 1000
为什么呢?
因为df[df.A]得到是一个临时切片结果,等于一个中间变量,然后在这个中间变量上的A列上做赋值操作,但是最原始的df却没有被改变。
或者你可以这样写
df=df[df.A>5]
df.A=1000