我是Python和堆栈交换的新手。我一直在尝试用特定列中的np.nan替换无效值(x< -3和x> 12)。
我不知道我将需要处理多少列,因此必须创建一个考虑到这一点的通用代码。但我知道,前两列分别是ID和名称。我已经搜索了谷歌和堆栈交换的解决方案,但未能找到解决我的具体目标的解决方案。
我的问题是;如何替换第三列及以后的值?
我的数据框看起来像这样;
我尝试过这一行:
Data[Data > 12.0] = np.nan.
这用nan
取代了前两列我尝试过这一行:
Data[(Data.iloc[(range(2,Columns))] >=12) & (Data.iloc[(range(2,Columns))]<=-3)] = np.nan
其中,
Columns = len(Data.columns)
替换第2行到第6行(列= 7)中的所有值显然是错误的。
任何想法都会非常感激。
Python 3.6.1 64bits,Qt 5.6.2,Darwin上的PyQt5 5.6
答案 0 :(得分:3)
您正在寻找applymap()
方法。
import pandas as pd
import numpy as np
# get the columns after the second one
cols = Data.columns[2:]
# apply mask to those columns
new_df = Data[cols].applymap(lambda x: np.nan if x > 12 or x <= -3 else x)
文档:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.applymap.html
此方法假设您的列在第二行后包含float
或int
值。