python—如何安全地解决在 Dataframe 上分配时带有复制警告的设置

yfjy0ee7  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(145)

我有一个标准的Pandas数据框:-
<class'pandas.core.frame.dataframe'>
最后一列称为“text”,每行包含一个文本字符串。我试图通过应用一个公式来转换文本值的最后一列,该公式用一个新字符串替换它们。
然而,无论我做什么,我似乎都得到了以下警告:-
/usr/local/lib/python3.7/dist packages/pandas/core/index.py:1763:settingwithcopywarning:试图在 Dataframe 中的切片副本上设置值。尝试改用.loc[row\u indexer,col\u indexer]=value
请参阅文档中的注意事项:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-vs-a-copy isetter(位置,值)
在列上指定my函数会产生上述错误:-

X_train.loc[:,"text"] = X_train.loc[:,"text"].transform(lambda x : a_function(x))

这也会产生错误。

X_train.loc[:,"text"] = X_train.loc[:,"text"].apply(lambda x : a_function(x))

将等式的右侧放入变量中,我意识到代码的这一部分没有错误(即等号右侧的代码, X_train.loc[:,"text"].apply(lambda x : a_function(x)) ). 因此,我知道问题必须与我在 Dataframe 顶部分配的方式有关(即等号左侧的代码, X_train.loc[:,"text"] )
我尝试在值的顶部分配一个文本字符串:-

X_train.loc[:,'text'] = "a text string"

我还尝试应用一个包含新文本字符串的新pandas series对象

X_train.loc[:,'text'] = a_series

这两个实验都证实,问题在于试图分配更多的时间 X_train.loc[:,'text'] 我觉得特别奇怪的是,代码似乎在 .loc[row_indexer,col_indexer] = value 警告建议的格式。
我已经在https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-vs-a-copy。然而,我仍然不清楚如何解决我的错误,尽管我意识到这一定与转换我的数据的浅拷贝的危险有关。
值得注意的是,当我在应用转换后检查 Dataframe 时,原始数据已被修改。事实上,我仍然收到Pandas的警告,这让我很担心,所以我不觉得只是关闭了警告。我宁愿编写不产生错误的代码,这样我就知道我的代码对任何抛出的新数据都是健壮的,并且不会突然开始修改一个浅层副本,同时保持原始副本不变。
如果我要求太多

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题