是否将np.inf和np.inf值替换为dataframe中列的最大值和最小值?

2024-05-20 13:16:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据帧中有一些-np.infnp.inf值。 我想用数据帧各自的最小值和最大值来替换它们

我认为这样的事情应该是可能的:

df.replace([np.inf, -np.inf], [df.max, df.min], axis=1, inplace = True)

但它不起作用。我有这个想法是因为我可以使用类似的东西来用fillna()替换nans

什么是有效的方法

有裸体版吗

谢谢你的提示


Tags: 数据方法truedfnpmin事情max
3条回答

您可以使用^{},如下所示:

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 = 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})

演示

数据输入

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   345.0  1234.0
1 -2000.0   890.0
2   345.0   890.0

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。这样就可以计算最小/最大界限

您可以为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

相关问题 更多 >