Python 如何对数据帧中的所有值进行舍入并应用最小值和最大值

Python 如何对数据帧中的所有值进行舍入并应用最小值和最大值,python,pandas,data-wrangling,Python,Pandas,Data Wrangling,我正在努力解决如何清理数据帧的问题。我要做的是截断所有项目(即floor()),对于低于或高于最小值/最大值的任何项目,请使用最小值或最大值替换(如适用)。例如,对于此数据帧: 如果我的最小值和最大值分别为1和5,则1.2将截断为1,9.6将映射为5,-1.2将映射为1,3.5将截断为3: 除了使用iterrows()进行暴力迭代之外,我还没能让它正常工作。很多关于求最小值和最大值的东西,但不是应用最小值和最大值 请问有没有人有什么建议?谢谢。您可以使用applymap,例如: from n

我正在努力解决如何清理数据帧的问题。我要做的是截断所有项目(即floor()),对于低于或高于最小值/最大值的任何项目,请使用最小值或最大值替换(如适用)。例如,对于此数据帧:

如果我的最小值和最大值分别为1和5,则1.2将截断为1,9.6将映射为5,-1.2将映射为1,3.5将截断为3:

除了使用iterrows()进行暴力迭代之外,我还没能让它正常工作。很多关于求最小值和最大值的东西,但不是应用最小值和最大值


请问有没有人有什么建议?谢谢。

您可以使用
applymap
,例如:

from numpy import floor

MAX, MIN = 5, 1

df = df.applymap(lambda val: MAX if val > MAX else int(floor(val)) if val > MIN else MIN)
您可以使用并强制转换为

df=pd.DataFrame({
“A”:[1.2,3.5],
‘B’:[9.6,-1.2]
})
df.clip(1,5).astype('int')
输出:

如果您想要
float
值,您可以
floor
使用
np.floor
的数据帧,它方便地返回
pd.dataframe
,然后返回
clip

将numpy导入为np
np.楼层(df)
输出:

np.地板(df).夹(1,5)
输出:


微观基准 使用
python3.6.9
pandas1.1.5
在googlecolab实例上运行

结果:

用于基准测试的代码

将熊猫作为pd导入
将numpy作为np导入
导入性能图
def make_数据(n=100):
返回pd.DataFrame(
np.随机均匀(-1.2,9.6,(n,10))
)
def夹扣(df):
返回df.clip(1,5.astype('int'))
def卡夹NPU地板(df):
返回np.地板(测向夹(1,5))
从numpy进口楼层
def应用映射(df):
最大值,最小值=5,1
返回df.applymap(lambda val:MAX if val>MAX else int(floor(val))if val>MIN else MIN)
perfplot.show(
设置=生成数据,
内核=[clip\u castint,clip\u npfloor,applymap],
n_范围=[2**k表示范围(10,22)中的k],
xlabel=“df(第10行)”
)

啊,谢谢。我在尝试df.apply(如果x<1,则lamba x:1,否则x),这会给我带来错误;我没听说过applymap()。在我的代码中使用applymap()而不是apply()非常有效;我尝试使用np.floor(df.clip(1,5))作为示例,这也很有效。我必须尝试一下这个与applymap()的比较,看看哪个性能更好。@tendim-我添加了一个小的基准测试。谢谢你的基准测试。对于我的小数据集,这没有什么区别,但对于较大的数据集,我会记住这一点。
   A  B
0  1  5
1  3  1
     A    B
0  1.0  9.0
1  3.0 -2.0
     A    B
0  1.0  5.0
1  3.0  1.0