lde*_*ina 5 python dataframe pandas chained-assignment
我尝试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'])
Run Code Online (Sandbox Code Playgroud)
我得到的所有这些字符串
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
Run Code Online (Sandbox Code Playgroud)
那有什么问题?
piR*_*red 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
Run Code Online (Sandbox Code Playgroud)
让我指定的切片df1来df2
df2 = df1[['A', 'C']]
Run Code Online (Sandbox Code Playgroud)
df2如果我们试图改变一些事情的话,现在已经成为了一部分df1并且应该触发那些讨厌的SettingWithCopyWarning人df2.让我们来看看.
df2.drop('c')
Run Code Online (Sandbox Code Playgroud)
没问题.怎么样:
df2.drop('c', inplace=True)
Run Code Online (Sandbox Code Playgroud)
它是:
问题是pandas试图提高效率并且跟踪df2指向相同数据的轨道df1.它保留了这种关系.警告告诉您,您不应该尝试通过切片混淆原始数据帧.
请注意,当我们查看时df2,行'c'已被删除.
df2
Run Code Online (Sandbox Code Playgroud)
看着df1我们看到行'c'仍在那里.
df1
Run Code Online (Sandbox Code Playgroud)
熊猫制作了一份df2然后丢弃的'c'行.这可能与我们的意图可能不一致,我们的意图是考虑到我们做df2了一些并指向相同的数据df1.所以大熊猫警告我们.
要看不到警告,请自行复制.
df2 = df2.copy()
# or
df2 = df1[['A', 'C']].copy()
Run Code Online (Sandbox Code Playgroud)