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