python - 如何设置由 np.arange() 生成的列名的精度?
问题描述
我制作了数据框并使用np.arange()
. 但是,它(有时)将它们设置为像 0.300000004 这样的数字,而不是确切的数字。
我尝试了舍入整个数据框并使用np.around()
输出np.arange()
,但这些似乎都不起作用。我还尝试在顶部添加这些:
np.set_printoptions(suppress=True)
np.set_printoptions(precision=3)
这是我的函数的返回语句:
stepT = 0.1
%net is some numpy array
return pd.DataFrame(net, columns = np.arange(0,1+stepT, stepT),
index = np.around(np.arange(0,1+stepS,stepS),decimals = 3)).round(3)
是否有任何功能可以让我将这些名称作为逗号后只有一位数字的数字?
解决方案
浮点数的明显不精确性经常出现。
In [689]: np.arange(0,1+stepT, stepT)
Out[689]: array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
In [690]: _.tolist()
Out[690]:
[0.0,
0.1,
0.2,
0.30000000000000004,
0.4,
0.5,
0.6000000000000001,
0.7000000000000001,
0.8,
0.9,
1.0]
In [691]: _689[3]
Out[691]: 0.30000000000000004
numpy 打印选项控制数组的显示方式。但是在打印单个值时它们不起作用。
当我使用此列规范制作数据框时,我得到了很好的显示。(_689
是Out[689]
数组的 ipython 简写。)它使用数组格式:
In [699]: df = pd.DataFrame(np.arange(11)[None,:], columns=_689)
In [700]: df
Out[700]:
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
0 0 1 2 3 4 5 6 7 8 9 10
In [701]: df.columns
Out[701]:
Float64Index([ 0.0, 0.1, 0.2,
0.30000000000000004, 0.4, 0.5,
0.6000000000000001, 0.7000000000000001, 0.8,
0.9, 1.0],
dtype='float64')
但是像这样选择带有浮点数的列是很棘手的。有些工作,有些不工作。
In [705]: df[0.4]
Out[705]:
0 4
Name: 0.4, dtype: int64
In [707]: df[0.3]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
看起来它正在做某种字典查找。浮点数不能很好地解决这个问题,因为它们固有的不精确性。
对 进行相等性测试arange
:
In [710]: _689[3]==0.3
Out[710]: False
In [711]: _689[4]==0.4
Out[711]: True
我认为您应该从 中创建一个格式正确的字符串列表arange
,并将其用作列标题,而不是浮点数本身。
例如:
In [714]: alist = ['%.3f'%i for i in _689]
In [715]: alist
Out[715]:
['0.000',
'0.100',
'0.200',
'0.300',
'0.400',
'0.500',
'0.600',
'0.700',
'0.800',
'0.900',
'1.000']
In [716]: df = pd.DataFrame(np.arange(11)[None,:], columns=alist)
In [717]: df
Out[717]:
0.000 0.100 0.200 0.300 0.400 0.500 0.600 0.700 0.800 0.900 1.000
0 0 1 2 3 4 5 6 7 8 9 10
In [718]: df.columns
Out[718]:
Index(['0.000', '0.100', '0.200', '0.300', '0.400', '0.500', '0.600', '0.700',
'0.800', '0.900', '1.000'],
dtype='object')
In [719]: df['0.300']
Out[719]:
0 3
Name: 0.300, dtype: int64
推荐阅读
- doxygen - doxygen - WARN_AS_ERROR 仅适用于某些区域
- zip - 嵌入的 OLE PDF-Object 比 DOCX 中的原始对象大
- javascript - PHP / Javascript 变量传递——意外结果
- view - Hive 元数据视图行数
- android - CoordinatorLayout 内的 RecyclerView 滚动问题
- c++ - 错误:使用未声明的标识符 'self' c++-objective c 混合
- android - Android,完成从 firebase 加载数据
- python - Django 和 docker:向控制台输出信息
- angular - 在验证 Angular 表单时显示消息时出现错误
- c++ - 结构错误:“没有匹配的函数调用”