系列/列表转换时的小数问题

问题描述 投票:0回答:1

当我尝试将 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]
python pandas list series
1个回答
0
投票

正如弹涂鱼评论的那样,这不是熊猫的问题。这是一个浮点数计算问题。由于显示选项的原因,您在调用该系列时看不到小数。

我相信这个堆栈溢出帖子可能会澄清......

© www.soinside.com 2019 - 2024. All rights reserved.