熊猫SettingWithCopyWarning仅在内部函数

时间:2019-07-05 18:03:10

标签: python-3.x pandas

具有类似数据框

import pandas as pd

df = pd.DataFrame(
    ["2017-01-01 04:45:00", "2017-01-01 04:45:00removeMe"], columns=["col"]
)

为什么我在这里得到SettingWithCopyWarning

def test_fun(df):
    df = df[~df["col"].str.endswith("removeMe")]
    df.loc[:, "col"] = pd.to_datetime(df["col"])
    return df

df = test_fun(df)

但是如果我不运行该功能就不会运行吗?

df = df[~df["col"].str.endswith("removeMe")]
df.loc[:, "col"] = pd.to_datetime(df["col"])

我的函数应该是什么样子?

1 个答案:

答案 0 :(得分:1)

在函数中,您拥有df,当您使用布尔数组对其进行索引时,它会提供外部范围df的视图-然后,您尝试对该视图进行附加索引,这就是为什么出现警告的原因。没有功能,df只是一个数据框,它使用索引来调整大小(而不是视图)。

我会这样写:

df["col"] = pd.to_datetime(df["col"], errors='coerce')
return df[~pd.isna(df["col"])]