首页 > 解决方案 > Pandas 仅替换包含数字的列的数字

问题描述

我有超过 100 列的数据框。但在这里我试图替换整个数据框中的数字,其列包含数字(Int/float/任何数字格式)。

我知道如何单独处理列,但我正在寻找一些智能代码,如果值 <= 0 和 111 如果值 > 50,则有效地将值替换为 -5。

下面是代码。

import numpy as np
import pandas as pd

df = pd.DataFrame({'Name': ['Avery Bradley', 'Jae Crowder', 'John Holland', 'R.J. Hunter'],
 'Team': ['Boston Celtics',
  'Boston Celtics',
  'Boston Celtics',
  'Boston Celtics'],
 'Number1': [0.0, 999.0, -30.0, 28.0],
 'Number2': [1000, 500, -10, 25],
 'Position': ['PG', 'SF', 'SG', 'SG']})

#df["Number1"].values[df["Number1"] > 50] = 999
#df["Number1"].values[df["Number1"] < 0]  = -5

df[ df > 50 ] = 888
df[ df < 0  ] = -5

标签: pythonpandas

解决方案


您可以select_dtypesnp.select此处用于多个条件:

m = df.select_dtypes(np.number)
df[m.columns] = np.select([m>50,m<0],[888,-5],m)

print(df)
            Name            Team  Number1  Number2 Position
0  Avery Bradley  Boston Celtics      0.0    888.0       PG
1    Jae Crowder  Boston Celtics    888.0    888.0       SF
2   John Holland  Boston Celtics     -5.0     -5.0       SG
3    R.J. Hunter  Boston Celtics     28.0     25.0       SG

推荐阅读