Python 熊猫:如何将列中太大的值(坏数据)设置为零,我应该使用if函数还是完全不同的函数?

Python 熊猫:如何将列中太大的值(坏数据)设置为零,我应该使用if函数还是完全不同的函数?,python,database,pandas,dataframe,Python,Database,Pandas,Dataframe,熊猫数据帧“power”以日期时间作为索引。列是Ap1、Ap2、Ap3和Solar,它们具有float64值。但是,有些数据不好,我想用零替换超过某个值(例如100000)的所有值。以下是dataframe的外观: power.head() power.describe() Ap1 Ap2 Ap3 Solar Datetime 2018-01-01 00:00:00 659.18 59.51

熊猫数据帧“power”以日期时间作为索引。列是Ap1、Ap2、Ap3和Solar,它们具有float64值。但是,有些数据不好,我想用零替换超过某个值(例如100000)的所有值。以下是dataframe的外观:

power.head()
power.describe()

                    Ap1     Ap2     Ap3     Solar
Datetime                
2018-01-01 00:00:00 659.18  59.51   120.39  0.0
2018-01-01 00:01:00 600.59  119.93  179.90  0.0
2018-01-01 00:02:00 600.59  119.93  119.93  0.0
2018-01-01 00:03:00 534.67  119.93  59.97   0.0
2018-01-01 00:04:00 600.59  119.93  119.93  0.0


    Ap1             Ap2             Ap3             Solar
max 6.489067e+06    1.167420e+06    2.296201e+06    52433.040000
我尝试使用if函数遍历列,该函数将用零替换大值:

def badvalue(x):
    if x > 100000:
        x == 0

power["Ap1"].apply(badvalue)
但是,这对数据没有任何影响,而且我知道您可能无论如何都无法以这种方式更改值(我希望Pandas是这样直观!)那么用熊猫做这件事最简单/最好的方法是什么?

如果我想同时对所有列执行此操作,而不是只对一列执行此操作,那么方法会有所不同吗

感谢您的帮助。

使用:

power.Ap1[power.Ap1 > 10000] = 0

其他列也是如此。

代码的问题在于没有将其分配给任何内容。这样你的代码应该可以工作:
power[“Ap1”]=power[“Ap1”].apply(badvalue)
但是在pandas中这可以做得更有效:
power.loc[power[“Ap1”]>10000,“Ap1”]=0
谢谢你,后一个例子正是需要的。出于好奇,您知道为什么注释中的第一个示例将列中的每个值都更改为“无”吗?您的函数badvalue没有返回任何内容(我以前没有注意到)。如果将
return x
添加到函数的底部,它可能会按预期工作。我之前也尝试过使用return x,但仍然没有正确执行。但这没关系,从现在起我将使用.loc,再次感谢。更改值时首选使用df.loc[]。谢谢。你能告诉我这样的比较来源吗:)只要看看你在运行代码时得到的警告:
SettingWithCopyWarning:一个值正试图在数据帧的一个切片副本上设置。尝试使用.loc[row\u indexer,col\u indexer]=value,请参见文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-查看与复制“”
我在运行代码后粘贴了答案,没有任何警告。无论如何,我也很感激你说的对,我的错。我做了另一件事。