【问题标题】:SettingWithCopyWarning occurs when using Pandas extract() within a functionSettingWithCopyWarning 在函数中使用 Pandas extract() 时发生
【发布时间】:2021-11-20 23:18:52
【问题描述】:

在 Pandas 中,我尝试按日期过滤 DataFrame,然后从较长的字符串中提取 reportId 字符串(即短划线之间的 6 位数字);但是,当我运行以下代码时,会收到警告:

SettingWithCopyWarning: 试图在 DataFrame 中的切片副本上设置一个值。 尝试改用 .loc[row_indexer,col_indexer] = value

list_date = [1632309961, 1632310980, 1632311134, 1632411137, 
            1632411139, 1632411142, 1632411144, 1632411146, 
            1632413166, 1632413427]
list_id =   ['se-84c735-hg5675', 'se-5f73s9-hg3465', 'se-1f34g6-hg3455', 'se-09f67s-hg5123', 
            'se-5g63g9-hg1235', 'se-47h8h0-hg5555', 'se-h901h3-hg6755', 'se-287n54-hg5321', 
            'se-g357a8-hg6675', 'se-56q89r-hg5767']

df = pd.DataFrame([list_date, list_id], index=['date_unix','id']).T

def test_extract(df):
    df['date'] = pd.to_datetime(df['date_unix'], unit='s')
    df = df[df['date'] >= pd.to_datetime('2021-09-23')]
    df['reportId'] = df['id'].str.extract(r"([a-zA-Z0-9]{6})")
    return df

test_extract(df)

我尝试了一些不同的修复方法,例如使用 .loc[row_indexer,col_indexer] 制作日期过滤器或在所有内容之后抛出 .copy();但是,我遇到了同样的问题:

def test_extract(df):
    df['date'] = pd.to_datetime(df['date_unix'], unit='s')
    df = df.loc[df['date'] >= pd.to_datetime('2021-09-23'),:]
    df['reportId'] = df['id'].str.extract(r"([a-zA-Z0-9]{6})")
    return df

奇怪的是,当我在函数之外运行相同的代码时,我不再收到警告。当代码在函数中时,谁能为我提供避免此警告的解决方案?

信息: 熊猫 - 0.23.4 :: Python 3.7.10 :: 操作系统 - Linux(Ubuntu 16.04.7 LTS)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我找到了解决此问题的方法;但是我仍然不确定为什么这个解决方案有效,而不是其他解决方案。我只是将 Pandas 正则表达式提取移到日期过滤器之前。不再从切片的副本创建 df['reportId'] 是有道理的,但我仍然不知道为什么用 .loc 格式化日期过滤器不能解决这个问题。如果有人有见解,我欢迎您的评论。

    def test_extract(df):
        df['reportId'] = df['id'].str.extract(r"([a-zA-Z0-9]{6})")
        df['date'] = pd.to_datetime(df['date_unix'], unit='s')
        df = df[df['date'] >= pd.to_datetime('2021-09-23')]
        return df
    
    test_extract(df)
    

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 2017-07-16
      • 2016-10-16
      • 2020-05-06
      • 2014-10-18
      • 2017-11-21
      • 2018-12-25
      • 2014-12-30
      相关资源
      最近更新 更多