当我尝试将 Pandas Series 转换为 Python 列表时遇到小数问题,当我操作浮点数时就会出现这种问题。
当我尝试相交两个列表并得到错误的行为时,我没想到会出现这种情况,并被这个无声的问题所欺骗。
我尝试用十进制包解决它,但没有成功。然后我设法通过强制将值四舍五入到小数点后两位来解决这个问题,但我对此并不满意。有办法避免这个问题吗?或者我们每次都被迫对列表值进行四舍五入?
这是重现该问题的最小示例:
# --- THE PROBLEM
import pandas as pd
# Create a Pandas Series
series1 = pd.Series([0.2, 0.4, 0.6, 0.8])
# Create a new Series from the original
series2 = series1 + 0.1
# Convert the series to a list
list_from_series1 = series1.tolist()
list_from_series2 = series2.tolist()
list_from_series3 = list(series2)
# Show output
print(list_from_series1) # no problem
print(series2) # no problem
print(list_from_series2)
print(list_from_series3)
# --- ATTEMPT TO SOLVE IT WITH DECIMAL PACKAGE
from decimal import *
getcontext().prec = 2
print(list_from_series3)
# --- FORCE IT
import numpy as np
list_from_series3 = np.around(np.array(list_from_series3),2)
print(list_from_series3)
输出
[0.2, 0.4, 0.6, 0.8]
0 0.3
1 0.5
2 0.7
3 0.9
dtype: float64
[0.30000000000000004, 0.5, 0.7, 0.9]
[0.30000000000000004, 0.5, 0.7, 0.9]
[0.30000000000000004, 0.5, 0.7, 0.9]
[0.3 0.5 0.7 0.9]
正如弹涂鱼评论的那样,这不是熊猫的问题。这是一个浮点数计算问题。由于显示选项的原因,您在调用该系列时看不到小数。
我相信这个堆栈溢出帖子可能会澄清......