如何将pandas字符串Series转换为符合18位小数规则的float数值
报错原因
代码抛出TypeError是因为错误地将生成器表达式int(item) for item in my_series直接传入了format方法,该方法无法识别生成器对象。同时转换逻辑存在偏差:题目中每个字符串本质是「实际值放大10^18倍后的整数的字符串形式」,直接做除法即可得到真实值,无需额外做字符串格式化。
转换代码
普通列表转换
如果处理的是普通Python列表,直接用列表推导式即可:
my_series = ['150000000000000000000000', '45064744242514231410', '2618611848503168287542', '7673975728717793369'] converted_list = [int(item) / 10**18 for item in my_series]
Pandas Series转换
如果处理的是Pandas Series对象,用向量化操作效率更高:
import pandas as pd my_series = pd.Series(['150000000000000000000000', '45064744242514231410', '2618611848503168287542', '7673975728717793369']) # 方案1:先转整数再做除法,适合数值范围在int64以内的场景 converted_series = my_series.astype('int64') / 10**18 # 方案2:直接转float后做除法,兼容超大数值场景 converted_series = my_series.astype(float) / 10**18
转换后得到的数值完全符合需求:
- 第一个值对应
150000.0 - 第二个值对应
45.06474424251423 - 第三个值对应
2618.611848503168 - 第四个值对应
7.673975728717793
内容的提问来源于stack exchange,提问作者Luiz Scheuer
相关产品推荐
相关产品推荐

