Pandas:设置为str.lower()的copywarning

2024-09-28 21:08:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道在尝试将str.lower()应用于pandas dataframe中的一列时,如何处理SettingWithCopyWarning,以便仅该列上的所有数据都是小写的

我的实际代码

df2["originator _ beliefs"]  = df2["originator _ beliefs"].str.lower()

我的错误:

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

我的其他尝试:

df3["originator _ beliefs"]  = df2.loc[df2["originator _ beliefs"].str.lower()]
df3["originator _ beliefs"]  = df2["originator _ beliefs"].str.lower().copy()

我所要做的就是将“创始人信念”中的所有项目小写。


Tags: 数据dataframepandasvaluelowerlocdf2小写
1条回答
网友
1楼 · 发布于 2024-09-28 21:08:26

这是警告,不是错误。运行代码后检查df2["originator _ beliefs"];您应该看到它确实降低了您试图降低的列。警告是指您正在从推断的df1(即df2)更改切片的副本,并且如果您试图更改df1,您将无法更改。有一些方法可以抑制警告,但这有点超出了问题的范围

In [36]: df = pd.DataFrame([[1, 'a'], [2, 'b']], columns=['num', 'char'])

In [37]: df
Out[37]:
   num char
0    1    a
1    2    b

In [38]: df1 = df[df.char == 'a']

In [39]: df1
Out[39]:
   num char
0    1    a

In [40]: df1['char'] = df1['char'].str.upper()
<ipython-input-40-0ba8b77332da>:1: 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: https://pandas.pydata.org/pandas-docs/stable/user_g
uide/indexing.html#returning-a-view-versus-a-copy
  df1['char'] = df1['char'].str.upper()

In [41]: df1
Out[41]:
   num char
0    1    A

In [42]: df
Out[42]:
   num char
0    1    a
1    2    b

一定要查看文档以了解更多信息:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

相关问题 更多 >