5

我尝试delete一些列并转换列中的一些值

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

那里有什么问题?

4

1 回答 1

11

df2是另一个数据框的一部分。您需要df2 = df2.copy()在尝试之前明确复制它drop

考虑以下数据框:

import pandas as pd
import numpy as np


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

df1

在此处输入图像描述

让我分配一个df1todf2

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

在此处输入图像描述

df2现在 是 一部分df1并且 应该 触发 那些 讨厌SettingWithCopyWarning的 , 如果 我们 尝试 改变 事情df2. 让我们来看看。

df2.drop('c')

在此处输入图像描述

没问题。怎么样:

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

它是:

在此处输入图像描述

问题是 pandas 试图提高效率并跟踪df2指向与df1. 它正在维护这种关系。该警告告诉您,您不应该尝试通过切片来弄乱原始数据帧。

请注意,当我们查看 时df2,行 'c' 已被删除。

df2

在此处输入图像描述

看着df1我们看到那行'c'仍然存在。

df1

在此处输入图像描述

熊猫复制了df2然后删除的行'c'。这可能与我们的意图可能不一致,因为我们认为我们制作df2了一个切片并指向与df1. 所以熊猫在警告我们。

要看不到警告,请自己制作副本。

df2 = df2.copy()
# or
df2 = df1[['A', 'C']].copy()
于 2016-07-01T14:07:02.023 回答