私信  •  关注

user443854

user443854 最近创建的主题
user443854 最近回复了
4 年前
回复了 user443854 创建的主题 » 用Python固定复制警告(复制)

做一个 .copy(deep=False) pandas.DataFrame.copy .

import pandas as pd
df = pd.DataFrame({'x':[1,2,3]})

这会发出警告:

df0 = df[df.x>2]
df0['foo'] = 'bar'

这不会:

df1 = df[df.x>2].copy(deep=False)
df1['foo'] = 'bar'

df0 df1 DataFrame 对象,但它们的一些不同之处使熊猫能够打印警告。让我们看看是什么。

import inspect
slice= df[df.x>2]
slice_copy = df[df.x>2].copy(deep=False)
inspect.getmembers(slice)
inspect.getmembers(slice_copy)

|          | slice   | slice_copy |
| _is_copy | weakref | None       |

决定是否发出警告的方法是 DataFrame._check_setitem_copy 哪个检查 _is_copy copy 所以你的数据帧不是 _是副本吗

警告是建议使用 .loc .loc位置 在一个框架上 _是副本吗 ,仍然会收到相同的警告。误导?对。烦人的?当然。有帮助吗?可能,当使用链式赋值时。但是它不能正确地检测到链的分配,并且不加选择地打印警告。