python - 重新标记 pandas 中的级别

标签 python pandas

在 pandas DataFrame 中,我试图用一个名称重新标记变量的两个级别,但保持变量中的“Nan”值不变。

下面是使用“mtcars”数据集的修改版本的可重现示例。例如,在这里我想将“am”变量的"is"和“否”级别重新标记为"new"。

                    mpg   cyl  disp  hp drat    wt  qsec vs  am  
Mazda RX4           21.0  six 160.0 110 3.90 2.620 16.46  0  yes     
Mazda RX4 Wag       21.0  two 160.0 110 3.90 2.875 17.02  0  NaN    
Datsun 710          22.8  six 108.0  93 3.85 2.320 18.61  1  no    
Hornet 4 Drive      21.4  two 258.0 110 3.08 3.215 19.44  1  NaN   
Hornet Sportabout   18.7  six 360.0 175 3.15 3.440 17.02  0  yes  
Valiant             18.1  two 225.0 105 2.76 3.460 20.22  1  NaN   
Duster 360          14.3  two 360.0 245 3.21 3.570 15.84  0  no   

结果将如下所示:

                    mpg   cyl  disp  hp drat    wt  qsec vs  am  
Mazda RX4           21.0  six 160.0 110 3.90 2.620 16.46  0  new     
Mazda RX4 Wag       21.0  two 160.0 110 3.90 2.875 17.02  0  NaN    
Datsun 710          22.8  six 108.0  93 3.85 2.320 18.61  1  new    
Hornet 4 Drive      21.4  two 258.0 110 3.08 3.215 19.44  1  NaN   
Hornet Sportabout   18.7  six 360.0 175 3.15 3.440 17.02  0  new  
Valiant             18.1  two 225.0 105 2.76 3.460 20.22  1  NaN   
Duster 360          14.3  two 360.0 245 3.21 3.570 15.84  0  new

最佳答案

这里有两种方法,第一个是假设非 NaN 值应使用 notnull 设置为"new" :

In [21]:
df.loc[df['am'].notnull(),'am'] = 'new'
df

Out[21]:
                    mpg  cyl  disp   hp  drat     wt   qsec  vs   am
Mazda RX4          21.0  six   160  110  3.90  2.620  16.46   0  new
Mazda RX4 Wag      21.0  two   160  110  3.90  2.875  17.02   0  NaN
Datsun 710         22.8  six   108   93  3.85  2.320  18.61   1  new
Hornet 4 Drive     21.4  two   258  110  3.08  3.215  19.44   1  NaN
Hornet Sportabout  18.7  six   360  175  3.15  3.440  17.02   0  new
Valiant            18.1  two   225  105  2.76  3.460  20.22   1  NaN
Duster 360         14.3  two   360  245  3.21  3.570  15.84   0  new

另一种方法是使用 isin 仅过滤那些将"is"或“否”设置为"new"的行。 :

In [23]:
df.loc[df['am'].isin(['yes','no']),'am'] = 'new'
df

Out[23]:
                    mpg  cyl  disp   hp  drat     wt   qsec  vs   am
Mazda RX4          21.0  six   160  110  3.90  2.620  16.46   0  new
Mazda RX4 Wag      21.0  two   160  110  3.90  2.875  17.02   0  NaN
Datsun 710         22.8  six   108   93  3.85  2.320  18.61   1  new
Hornet 4 Drive     21.4  two   258  110  3.08  3.215  19.44   1  NaN
Hornet Sportabout  18.7  six   360  175  3.15  3.440  17.02   0  new
Valiant            18.1  two   225  105  2.76  3.460  20.22   1  NaN
Duster 360         14.3  two   360  245  3.21  3.570  15.84   0  new

关于python - 重新标记 pandas 中的级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31121803/

相关文章:

python - 将随机浮点列添加到数据框中,但对于相同的数据框条目具有相同的值

python - 如果列的所有元素均为负数,则 pandas 切片列

pandas - 从字典创建一个 dask 数据框

python-2.7 - 带分类轴的 3D 图 [Python/Matplotlib]

python - 如何将每个字符的数值表示相加

python - `docker-compose up` : postgres connection refused

python - 如何使用 python 动态展平深度嵌套的 json 文件?

python - 找到在 Robinhood 上获取比特币价格的 api 调用

python - 使用文本作为 pandas 中的列标题和列值将字符串拆分为列

python - 将输入直接添加到列表