当前位置: 首页 > 知识库问答 >
问题:

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

伏建修
2023-03-14

我的目的是将date列从dateframedf中的对象类型转换为datetime类型,但在运行程序时受到了很多视图和复制警告。

我发现了一些有用的信息从链接:https://stackoverflow.com/a/25254087/3849539

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

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

test.py:85:设置拷贝警告:一个值正试图在来自DataFrame的片的副本上设置。尝试使用. loc[row_indexer,col_indexer]=value代替

请参阅留档中的警告:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copydf['date']=df['date']. astype('datetime64')

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

~/Report/lib/python3.8/site-包/熊猫/core/frame.py:3188: SettingBackCopyWarning:一个值正试图从DataFrame的切片的副本上设置。尝试使用. loc[row_indexer,col_indexer]=value代替

请参阅留档中的警告:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy自[k1]=值[k2]test.py:85:SettingBackCopyWarning:正在尝试在DataFrame的切片副本上设置值。尝试使用. loc[row_indexer,col_indexer]=value代替

请参阅留档中的警告:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

解决方案3:df。loc[:,“日期”]=pd。截止日期时间(df.loc[:,'date'])

~/Report/lib/python3.8/site-包/熊猫/core/indexing.py:1676: SettingBackCopyWarning:一个值正试图从DataFrame的切片的副本上设置。尝试使用. loc[row_indexer,col_indexer]=value代替

请参阅留档中的警告:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy。_setitem_single_column(ilocs[0], value, pi)

共有1个答案

屠坚壁
2023-03-14

更改日期时间转换的方式不会修复SettingBackCopyWarning。你得到它是因为你正在使用的df已经是某个较大数据帧的一个片段。熊猫只是警告您,您正在使用切片而不是完整的数据。相反,尝试在df中创建一个新列-您将获得警告,但该列将存在于您的切片中。它不会在原始数据集中。

如果您现在正在使用pd执行操作,则可以关闭这些警告。选项。模式链式分配=无#默认值=“警告”

 类似资料:
  • 假设我有一个数据帧 我从我的数据子集创建另一个数据帧: 是否保存了中这些元素的副本?有没有办法创建该数据的?如果是这样,如果我尝试修改此视图中的数据会发生什么情况?Pandas是否提供任何类型的写时拷贝机制?

  • 你好,我有一个pandas系列的数据文件名“boilerinfo”来自一个API请求,我想创建一个CSV文件的数据。我该怎么做? python可以在这个目录中创建一个CSV文件吗?C:\users\lingbart\documents\python\wb Data

  • 视图是指对数据的引用,通过该引用亦便可访问、操作原有数据,但原有数据不会产生拷贝。如果我们对视图进行修改,它会影响到原始数据,物理内存在同一位置。 副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置。 视图一般发生在: Numpy 的切片操作返回原数据的视图; 调用 ndarray 的 view() 函数产生一个视图。 副本一般发生在: 在对 Pytho

  • 我有两个数据帧,都有一个键列,可能有重复项,但数据帧大部分都有相同的重复键。我希望在该键上合并这些数据帧,但这样做的方式是,当两者具有相同的副本时,这些副本将分别合并。此外,如果一个数据帧的键的副本比另一个多,我希望它的值填充为NaN。例如: 我正在尝试获得以下输出 所以基本上,我想把复制的K2键当作K2_1,K2_2。。。然后在数据帧上进行how='outer'合并。你知道我怎样才能做到这一点吗

  • 我有一个数据帧在下面的形状。