接收 SettingWithCopyWarning。继续进行是否安全?
Receiving SettingWithCopyWarning. Is it safe to proceed?
我正在尝试用仅包含 [=15] 中的字符串的行替换 DataFrame london
中的列 'let'
(这是另一个 no_eco
的副本) =] 方法。代码如下:
london = no_eco
london.loc[:,'let'] = london.loc[:,'let'].str.contains('E' or 'D' or 'F' or 'G' or 'H' or 'I' or 'J')
london.loc[:,'let'] = london.loc[:,'let'][london.loc[:,'let']]
london = london.dropna(subset = ['let'])
print(london)
代码有效,我删除了不符合字符串的行,但是我收到以下警告:
C:\Users\gerardchurch\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexing.py:543: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas- docs/stable/indexing.html#indexing-view-versus-copy
并且在查看文档时,我仍然无法理解我做错了什么。
这样可以继续使用变量 london
还是我以后会遇到问题?
谢谢。
您的代码存在几个问题:
london = no_eco
不会将 copy 分配给 london
。明确:london = no_eco.copy()
.
pd.Series.str.contains
默认支持regex,所以使用str.contains('E|D|F|G|H|I|J|')
.
- 你的逻辑很混乱。您首先用布尔系列替换
object
dtype 系列,然后为其分配一个由自身索引的子集,然后使用 dropna
,这是为 null 设计的值。
相反,只需构造一个布尔级数并使用 pd.DataFrame.loc
和布尔索引:
london = no_eco.copy()
london = london.loc[london['let'].str.contains('E|D|F|G|H|I|J|')]
对于这种特殊情况,您可以直接使用 pd.DataFrame.__getitem__
(df[]
语法):
london = no_eco.copy()
london = london[london['let'].str.contains('E|D|F|G|H|I|J|')]
我正在尝试用仅包含 [=15] 中的字符串的行替换 DataFrame london
中的列 'let'
(这是另一个 no_eco
的副本) =] 方法。代码如下:
london = no_eco
london.loc[:,'let'] = london.loc[:,'let'].str.contains('E' or 'D' or 'F' or 'G' or 'H' or 'I' or 'J')
london.loc[:,'let'] = london.loc[:,'let'][london.loc[:,'let']]
london = london.dropna(subset = ['let'])
print(london)
代码有效,我删除了不符合字符串的行,但是我收到以下警告:
C:\Users\gerardchurch\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexing.py:543: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas- docs/stable/indexing.html#indexing-view-versus-copy
并且在查看文档时,我仍然无法理解我做错了什么。
这样可以继续使用变量 london
还是我以后会遇到问题?
谢谢。
您的代码存在几个问题:
london = no_eco
不会将 copy 分配给london
。明确:london = no_eco.copy()
.pd.Series.str.contains
默认支持regex,所以使用str.contains('E|D|F|G|H|I|J|')
.- 你的逻辑很混乱。您首先用布尔系列替换
object
dtype 系列,然后为其分配一个由自身索引的子集,然后使用dropna
,这是为 null 设计的值。
相反,只需构造一个布尔级数并使用 pd.DataFrame.loc
和布尔索引:
london = no_eco.copy()
london = london.loc[london['let'].str.contains('E|D|F|G|H|I|J|')]
对于这种特殊情况,您可以直接使用 pd.DataFrame.__getitem__
(df[]
语法):
london = no_eco.copy()
london = london[london['let'].str.contains('E|D|F|G|H|I|J|')]