当列数未知时,替换Pandas Dataframe中特定列中的值

时间:2017-11-27 16:31:28

标签: python-3.x pandas dataframe

我是Python和堆栈交换的新手。我一直在尝试用特定列中的np.nan替换无效值(x< -3和x> 12)。

我不知道我将需要处理多少列,因此必须创建一个考虑到这一点的通用代码。但我知道,前两列分别是ID和名称。我已经搜索了谷歌和堆栈交换的解决方案,但未能找到解决我的具体目标的解决方案。

我的问题是;如何替换第三列及以后的值?

我的数据框看起来像这样;

Data

我尝试过这一行:

Data[Data > 12.0] = np.nan.

这用nan

取代了前两列

1st attempt

我尝试过这一行:

Data[(Data.iloc[(range(2,Columns))] >=12) & (Data.iloc[(range(2,Columns))]<=-3)] = np.nan

其中,

Columns = len(Data.columns)

替换第2行到第6行(列= 7)中的所有值显然是错误的。

2nd attempt

任何想法都会非常感激。

Python 3.6.1 64bits,Qt 5.6.2,Darwin上的PyQt5 5.6

1 个答案:

答案 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

此方法假设您的列在第二行后包含floatint值。