强制返回“视图”而不是在熊猫中复制?

强制返回“视图”而不是在熊猫中复制?,第1张

强制返回“视图”而不是在熊猫中复制?

您的问题分为两个部分:(1)如何制作视图(请参见本答案的底部),以及(2)如何制作副本

我将用一些示例数据进行演示:

import pandas as pddf = pd.Dataframe([[1,2,3],[4,5,6],[None,10,20],[7,8,9]], columns=['x','y','z'])# which looks like this:     x   y   z0   1   2   31   4   5   62 NaN  10  203   7   8   9

如何进行复制: 一种选择是在执行任何 *** 作后显式复制Dataframe。例如,假设我们正在选择不包含NaN的行:

df2 = df[~df['x'].isnull()]df2 = df2.copy()

然后,如果您修改df2中的值,您会发现修改不会传播回原始数据(df),而熊猫也不会警告“正在尝试从Dataframe的切片副本上设置值”

df2['x'] *= 100# original data unchangedprint(df)    x   y   z0   1   2   31   4   5   62 NaN  10  203   7   8   9# modified dataprint(df2)     x  y  z0  100  2  31  400  5  63  700  8  9

注意:您可能需要通过显式地制作副本来降低性能。

如何忽略警告:
或者,在某些情况下,您可能不关心是否返回视图或副本,因为您的意图是永久修改数据,而从不返回原始数据。在这种情况下,您可以禁止显示警告,并且可以轻松处理(只是不要忘记已将其关闭,并且代码可能会或可能不会修改原始数据,因为df2可能会或可能不会)副本):

pd.options.mode.chained_assignment = None  # default='warn'

有关更多信息,请参见如何处理Pandas中的SettingWithCopyWarning?

如何制作视图:
无论何时何地,Pandas都会隐式创建视图。关键是要使用该

df.loc[row_indexer,col_indexer]
方法。例如,
y
仅对column
x
不为null的行将column的值乘以100
,我们可以这样写:

mask = ~df['x'].isnull()df.loc[mask, 'y'] *= 100# original data has changedprint(df)     x    y   z0  1.0  200   31  4.0  500   62  NaN   10  203  7.0  800   9


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5648107.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存