使用math.ceil处理Pandas序列报错TypeError,np.ceil未达预期结果
搞定Pandas Series向上取整的问题
嘿,我来帮你解决这个向上取整的问题!先理清楚你遇到的两个问题,再给你正确的实现方式:
为什么math.ceil会报错?
math.ceil()这个函数只能处理单个数值,而data['ship_distance']是一个Pandas Series(也就是一组数值的集合),它没办法直接把整个Series转换成单个float,所以才会抛出TypeError: cannot convert the series to <class 'float'>这个错误。
关于np.ceil的“未得到预期结果”
其实np.ceil()完全能满足你的需求——它是向量化操作,会对Series里的每个元素单独做向上取整。你没得到预期结果,大概率是没把计算结果赋值回原DataFrame的列,只是跑了函数但没保存结果而已。
正确的实现代码
假设你的数据存在一个叫df的Pandas DataFrame里,按下面的步骤来:
- 先导入需要的库(如果还没导的话):
import pandas as pd import numpy as np
- 对
ship_distance列做向上取整,并且把结果转成整数类型(和你的预期格式匹配):
df['ship_distance'] = np.ceil(df['ship_distance']).astype(int)
验证结果
执行完上面的代码后,你的DataFrame就会变成你想要的样子:
| order_number | ship_distance | delivery_fee | utilization | remaining_multiplier_type |
|---|---|---|---|---|
| R000001943 | 4 | 11.25 | LOW | DISCOUNT |
| R000002604 | 6 | 7.00 | NaN | NaN |
| R000005277 | 3 | 7.00 | NaN | NaN |
| R000006010 | 9 | 9.50 | NaN | NaN |
| R000010127 | 4 | 6.00 | NaN | BASE |
额外小提示
你也可以用Pandas的apply方法来实现,比如df['ship_distance'].apply(np.ceil),但直接用np.ceil作用于Series的效率更高,因为它是向量化操作,比逐元素处理的apply快得多。
内容的提问来源于stack exchange,提问作者Nur Atiqah
相关产品推荐
相关产品推荐

