【问题标题】:Replace conditional values of a dataframe in multiple columns替换多列中数据框的条件值
【发布时间】:2022-07-06 15:31:04
【问题描述】:

我有一个包含多列的数据框,例如 [5745 行 x 112 列]。 我想替换某些列的某些值。有很多问题需要解决非常相似的问题,但我没有找到适合我的解决方案。

背景:我使用 pcolormesh 在 Bokeh 中绘制我的数据框。当具有“0”值时,网格将“0”值绘制为白色字段颜色。这会刺激视觉解释。因此,我想用一个非常小的值替换这些零,比如说 1e-15。 然后 Pcolormesh 使用地图的第一种颜色绘制这些字段。

数据集中带有“0”的 Pcolormesh 图:                带有“0”的 Pcolormesh 图替换为非常 1e-15 之类的小值:
                                                         

以下是一个非常小的示例数据框,用于测试和理解 porposes - 对于真正的巨大数据框,我不想提及所有列名,所以我尝试使用 'iloc':

import pandas as pd

df = pd.DataFrame({'a':[1, 0, 2, 3],
                   'b':[3, 1, 1, 1],
                   'c':[1, 2, 1, 0],
                   'd':[2, 1, 0, 0],
                   'e':[1, 0, 0, 0],
                   'f':[1, 1, 0, 1],
                   'g':[1, 1, 0, 0],
                   'h':[0, 0, 0, 0]})

df.iloc[:,-4:-1][df.iloc[:,-4:-1]< 1e-15] = 1e-15
df

导致警告:

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

但据我了解,只要我不写特定的列名,'loc' 就不起作用(我不想要 - 这些在真实数据框中太多了)。并且警告也出现了,因为“iloc”在操作方面无法替换数据框的值。

这就是为什么我试图用“替换”来真正替换(实际上是操纵)我的数据帧的值,根据熊猫的描述,它应该适用于数据帧

df[:,-4:-1] = df[:,-4:-1].replace(< 1e-15, =1e-15, inplace=True)

导致语法错误:

    df[:,-4:-1] = df[:,-4:-1].replace(< 1e-15, =1e-15, inplace=True)
                                      ^
SyntaxError: invalid syntax

df.replace({-4:-1}(to_replace[:,-4:-1]< 1e-15), 1e-15)

导致名称错误的原因:

    df.replace({-4:-1}(to_replace[:,-4:-1]< 1e-15), 1e-15)

NameError: name 'to_replace' is not defined

我确定只是拼写错误,但我没有找到。看到了吗?

谢谢!

【问题讨论】:

    标签: python pandas dataframe replace


    【解决方案1】:

    用途:

    df.iloc[:,-4:-1] = df.iloc[:,-4:-1].clip(lower=1e-15)
    

    或者:

    df.iloc[:,-4:-1] = df.iloc[:,-4:-1].mask(df.iloc[:,-4:-1]< 1e-15, 1e-15)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多