Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python数据帧时返回副本与视图警告_Python_Pandas_Dataframe_Warnings_Slice - Fatal编程技术网

使用Python数据帧时返回副本与视图警告

使用Python数据帧时返回副本与视图警告,python,pandas,dataframe,warnings,slice,Python,Pandas,Dataframe,Warnings,Slice,我的目的是将dateframedf中的对象类型的date列转换为datetime类型,但在运行程序时会遇到很多查看和复制警告 我从链接中找到了一些有用的信息: 并测试了以下三种解决方案,它们都按预期工作,但警告信息不同。有人能解释一下他们之间的区别,并指出为什么返回视图和副本时仍然会发出警告信息?谢谢 解决方案1:df['date']=df['date'].astype('datetime64') test.py:85:SettingWithCopyWarning:正在尝试在上设置值 从数据帧复

我的目的是将dateframe
df
中的对象类型的
date
列转换为datetime类型,但在运行程序时会遇到很多查看和复制警告

我从链接中找到了一些有用的信息:

并测试了以下三种解决方案,它们都按预期工作,但警告信息不同。有人能解释一下他们之间的区别,并指出为什么返回视图和副本时仍然会发出警告信息?谢谢

解决方案1:df['date']=df['date'].astype('datetime64')

test.py:85:SettingWithCopyWarning:正在尝试在上设置值 从数据帧复制切片。试用 .loc[行索引器,列索引器]=值 反而

请参阅文档中的注意事项: df['date']=df['date'].astype('datetime64')

解决方案2:df['date']=pd.to_datetime(df['date'])

~/report/lib/python3.8/site-packages/pandas/core/frame.py:3188: SettingWithCopyWarning:正在尝试在副本上设置值 从数据帧切片。试用 .loc[行索引器,列索引器]=值 反而

请参阅文档中的注意事项: 自身[k1]=值[k2] test.py:85:SettingWithCopyWarning:值为 试图在数据帧的切片副本上设置。试用 .loc[行索引器,列索引器]=值 反而

请参阅文档中的注意事项:

解决方案3:df.loc[:,'date']=pd.to_datetime(df.loc[:,'date'])

~/report/lib/python3.8/site packages/pandas/core/index.py:1676: SettingWithCopyWarning:正在尝试在副本上设置值 从数据帧切片。尝试使用.loc[row\u indexer,col\u indexer]=value 反而

请参阅文档中的注意事项: self._setitem_single_列(ilocs[0],值,pi)


更改日期时间转换的方式不会修复CopyWarning的设置。您得到它是因为您正在使用的
df
已经是某个较大数据帧的一部分。Pandas只是警告您正在使用切片,而不是完整的数据。尝试在
df
中创建一个新列-您将得到警告,但该列将存在于您的切片中。它不会出现在原始数据集中


如果您现在使用的是
pd.options.mode.chained\u assignment=None#default='warn'

嗨,Darina,谢谢您的回答,您可以关闭这些警告。根据您的信息,如果我想在原始数据而不是切片上创建一个新列,我应该如何做?谢谢。然后不要使用
df
而是使用它来自的原始数据帧。顺便说一下,可能是在某个时候,您执行了类似于
df=df[df.column==condition]
的操作,这也会创建一个切片(并覆盖原始
df
值)。如果我的回答对你有帮助,你能接受它是正确的吗?