pandas的行动设置了复制警告

发布于 2021-01-29 19:17:20

我试图“删除”某列并用

df2.drop(df2.columns[[0, 1, 3]], axis=1, inplace=True)
df2['date'] = df2['date'].map(lambda x: str(x)[1:])
df2['date'] = df2['date'].str.replace(':', ' ', 1)
df2['date'] = pd.to_datetime(df2['date'])

我得到的这条线

  df2.drop(df2.columns[[0, 1, 3]], axis=1, inplace=True)
C:/Users/����� �����������/Desktop/projects/youtube_log/filter.py:11: 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

有什么问题吗?

关注者
0
被浏览
53
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    你的“df2”是另一个数据帧的一部分。你需要显式地复制它

    在尝试“drop”之前使用`df2=df2.copy()``

    考虑以下数据帧:

    import pandas as pd
    import numpy as np
    
    
    df1 = pd.DataFrame(np.arange(20).reshape(4, 5), list('abcd'), list('ABCDE'))
    
    df1
    

    让我把“df1”的一部分分配给df2

    df2 = df1[['A', 'C']]
    

    `df2现在是df1的一部分,应该会触发那些讨厌的东西

    `如果我们试图更改“df2”中的内容,请使用copywarning设置。我们来一杯

    df2.drop('c')
    

    No problems. How about:

    df2.drop('c', inplace=True)
    

    There it is:

    问题是熊猫试图提高效率,并跟踪“df2”是什么

    指向与“df1”相同的数据。它正在保持这种关系。这个

    警告是告诉你,你不应该试图弄乱原来的

    通过切片的数据帧。

    请注意,当我们查看“df2”时,已经删除了“c”行。

    df2
    

    再看一下“df1”,我们看到“c”行还在。

    df1
    

    pandas复制了一个“df2”,然后删除了“c”行。这是潜在的

    与我们的意图不符,我们可能认为我们做了’df2’a’

    切片并指向与“df1”相同的数据。所以熊猫在警告我们。

    要看不到警告,请自己复制。

    df2 = df2.copy()
    # or
    df2 = df1[['A', 'C']].copy()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看