2024-05-20 13:16:15 发布
网友
我的数据帧中有一些-np.inf和np.inf值。 我想用数据帧各自的最小值和最大值来替换它们
-np.inf
np.inf
我认为这样的事情应该是可能的:
df.replace([np.inf, -np.inf], [df.max, df.min], axis=1, inplace = True)
但它不起作用。我有这个想法是因为我可以使用类似的东西来用fillna()替换nans
fillna()
什么是有效的方法
有裸体版吗
谢谢你的提示
您可以使用^{},如下所示:
df = df.replace({np.inf: df[np.isfinite(df)].max().max(), -np.inf: df[np.isfinite(df)].min().min()})
这里,df[np.isfinite(df)].max().max()和df[np.isfinite(df)].min().min()分别是数据帧的有限最大值和最小值。我们分别用它们替换np.inf和-np.inf
df[np.isfinite(df)].max().max()
df[np.isfinite(df)].min().min()
演示
数据输入
df = pd.DataFrame({'Col1': [np.inf, -2000.0, 345.0], 'Col2': [1234.0, -np.inf, 890.0]}) Col1 Col2 0 inf 1234.0 1 -2000.0 -inf 2 345.0 890.0
输出:
print(df) Col1 Col2 0 1234.0 1234.0 1 -2000.0 -2000.0 2 345.0 890.0
如果要替换为特定列的最小最大值,而不是全局数据帧上的最小最大值,可以使用^{}中的嵌套dict,如下所示:
col_min_max = {np.inf: df[np.isfinite(df)].max(), # column-wise max -np.inf: df[np.isfinite(df)].min()} # column-wise min df = df.replace({col: col_min_max for col in df.columns})
print(df) Col1 Col2 0 345.0 1234.0 1 -2000.0 890.0 2 345.0 890.0
inf和-inf相应地被列的相应最大值、最小值替换。
inf
-inf
您可以使用^{}来获取布尔序列或数据帧,然后您可以使用^{}来获取这些数据帧
>>> df 0 0 0.0 1 1.0 2 inf 3 2.0 4 -inf 5 3.0 >>> posinf = df.gt(0) & df.transform(np.isinf) >>> neginf = df.lt(0) & df.transform(np.isinf) >>> df = df.mask(posinf, df.mask(posinf).max().max()) >>> df = df.mask(neginf, df.mask(neginf).min().min()) >>> df 0 0 0.0 1 1.0 2 3.0 3 2.0 4 0.0 5 3.0
我屏蔽了两次,内部调用没有替换值,所以它替换为NaN。这样就可以计算最小/最大界限
NaN
您可以为inf/-inf计算^{},并替换为所需的值:
import numpy as np m1 = df.eq(np.inf) m2 = df.eq(-np.inf) df.mask(m1, df[~m1].max().max()).mask(m2, df[~m2].min().min()))
NB。这将用整个数据帧的最小/最大值替换inf,如果您希望每列的最小/最大值:
df.mask(m1, df[~m1].max(), axis=1).mask(m2, df[~m2].min(), axis=1)
输入:
col 0 inf 1 1.0 2 -inf 3 2.0 4 NaN
col 0 2.0 1 1.0 2 1.0 3 2.0 4 NaN
您可以使用^{} ,如下所示:
这里,
df[np.isfinite(df)].max().max()
和df[np.isfinite(df)].min().min()
分别是数据帧的有限最大值和最小值。我们分别用它们替换np.inf
和-np.inf
演示
数据输入
输出:
编辑
如果要替换为特定列的最小最大值,而不是全局数据帧上的最小最大值,可以使用^{} 中的嵌套dict,如下所示:
演示
数据输入
输出:
inf
和-inf
相应地被列的相应最大值、最小值替换。您可以使用^{} 来获取布尔序列或数据帧,然后您可以使用^{} 来获取这些数据帧
我屏蔽了两次,内部调用没有替换值,所以它替换为
NaN
。这样就可以计算最小/最大界限您可以为inf/-inf计算^{} ,并替换为所需的值:
NB。这将用整个数据帧的最小/最大值替换inf,如果您希望每列的最小/最大值:
输入:
输出:
相关问题 更多 >
编程相关推荐