Pythonでpandasで作業していた場合は、データフレームのスライスで作業するときにchained_assignmentの警告が既に分かっています(例:hereなど)。pandas chained_assignment警告例外処理
は私が
は、と比較例外を上げ、警告メッセージ
"raise"
を印刷し、警告"warn"
を無視して、
None
に設定することができますオプションpandas.options.mode.chained_assignment
を見つけましたdocumentation最低限の例を挙げましたが、例外処理のために
try..except..else
ブロック内にこの警告を発生させました。以下の例3に示すように、例外pandas.options.mode.chained_assignment = "raise"
を設定した場合にのみ例外が発生することが予想されます。この最小限の例では、動作は予期したとおりであるため、例2は
pandas.options.mode.chained_assignment = "warn"
となりますが、警告メッセージは出力されますが、例外は発生しません。しかし大きな枠組みの中で、Iは、最小例のように前に印刷して確認、例外はパラメータが
pandas.options.mode.chained_assignment = "warn"
に設定されているにもかかわらず、上昇され参照(実施例4参照)は他パンダはあり例外発生に関するこの警告メッセージの動作に影響を与えるパラメータ?ここ
pd.options.mode.chained_assignment
パラメータを印刷しtry..catch..except
ブロック内の挙動を示す/設定、コードの最小の例です。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 = "warn"
結果を設定例2
設定 (警告印刷されますが、例外はありません)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
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 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 = "raise"
結果を設定 コード。私は明示的に連鎖しpd.options.mode.chained_assignment
パラメータを設定していないが、私は例外が長い検索の後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