gpt4 book ai didi

python - pandas chained_assignment 警告异常处理

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:26 26 4
gpt4 key购买 nike

如果你在 python 中使用 pandas,你已经知道在处理数据帧切片时的 chained_assignment 警告(如描述的 here )。

我找到了可以设置为 pandas.options.mode.chained_assignment 的选项

  • None,忽略警告
  • "warn",打印警告信息
  • “raise”,引发异常

documentation 比较

我包含了一个最小示例,在用于异常处理的 try..except..else block 中触发此警告。我希望只有设置 pandas.options.mode.chained_assignment = "raise" 时才会触发异常,如以下示例 3 所示。

在这个最小的示例中,行为符合预期,因此示例 2 具有pandas.options.mode.chained_assignment = "warn" 只会导致打印警告消息,但不会引发异常。

然而,在更大的框架中,即使参数设置为 pandas.options.mode.chained_assignment = "warn",我也看到异常被引​​发,像在 minimal 中一样用打印检查示例(参见示例 4)

是否有任何其他 pandas 参数影响有关引发异常的警告消息的行为?


这是一个最小的代码示例,设置/打印 pd.options.mode.chained_assignment 参数并在 try..catch..except 中显示行为 block 。

import pandas as pd

# set the chained_assignment option
pd.options.mode.chained_assignment = "raise" # raises exception in case of warning
pd.options.mode.chained_assignment = "warn" # prints warning in case of warning, no exception is raised
pd.options.mode.chained_assignment = None # no warning message and no exception is raised

print "pd.options.mode.chained_assignment :", pd.options.mode.chained_assignment

# create a default pandas dataframe with two columns A,B
df = pd.DataFrame({"A" : [0, 1, 2], "B" : [3, 4, 5]})

print df

# exctract a slice of the given pandas dataframe
df2 = df[df["A"] > 0]

# exception handling
try :
# try to modify the slice, triggering the pandas warning
df2["C"] = 2
except :
print "EXCEPTION RAISED"
else :
print "NO EXCEPTION"

print df2

示例 1设置 pd.options.mode.chained_assignment = None 会导致以下输出(无警告,无异常)

pd.options.mode.chained_assignment : None
A B
0 0 3
1 1 4
2 2 5
NO EXCEPTION
A B C
1 1 4 2
2 2 5 2

示例 2设置 pd.options.mode.chained_assignment = "warn" 导致以下输出(打印警告,但无异常)

pd.options.mode.chained_assignment : warn
A B
0 0 3
1 1 4
2 2 5
NO EXCEPTION
C:\Users\my.name\my\directory\test.py:14: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
df2["C"] = 2
A B C
1 1 4 2
2 2 5 2

示例 3设置 pd.options.mode.chained_assignment = "raise" 导致以下输出(引发异常)

pd.options.mode.chained_assignment : raise
A B
0 0 3
1 1 4
2 2 5
EXCEPTION RAISED
A B C
1 1 4 2
2 2 5 2

示例 4这是我在一个更大的框架中看到的,具有完全相同的测试代码。我没有明确设置链式 pd.options.mode.chained_assignment 参数,但我看到它设置为 "warn",即使引发了异常

pd.options.mode.chained_assignment warn
A B
0 0 3
1 1 4
2 2 5
EXCEPTION RAISED
A B C
1 1 4 2
2 2 5 2

最佳答案

经过长时间的寻找,找到了“坏人”。另一位开发人员在他的模块中包含了以下几行

import warnings
warnings.filterwarnings('error')

这会将警告变成异常。有关详细信息,请参阅 warnings package documentation

因此,尽管 pandas 选项设置为“警告”,但我的警告被视为异常

关于python - pandas chained_assignment 警告异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47182183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com