Python pandas使用lambda添加精度

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

我试图使用以下代码找到数据字段的精度

fieldStructure.loc[fieldName,'Precision'] = df[fieldName].apply(lambda x: len(str.split(str(x), ".")[1])).max()

然而它返回了一个巨大的数字(18)。在调查时,我看到以下行为。我理解这是由于存储浮点的方式。但是有没有办法可以获得所需的输出,而不会损失我的源数据的精度?

我的数据框如下。

print('Sample Data: ',df[fieldName])

Sample Data:  0     0.0111
1     0.0109
2     0.0097
3     0.0113
4     0.0088
5     0.0101
6     0.0108
7     0.0113
8     0.0119
9     0.0090
10    0.0069
11    0.0585
12    0.0031
13    0.0205
14    0.0066
15    0.0081
16    0.0016
17    0.0122
18    0.0088
19    0.0132
20    0.0051
21    0.0032
22    0.0104
23    0.0097
24    0.0137
25    0.0142
26    0.0087
27    0.0106

但是,当我尝试使用lambda打印相同时,我得到以下结果

df[fieldName].apply(lambda x: print(x))
Name: MyColumn, dtype: float64
0.0111
0.0109
0.0097
0.0113
0.0088
0.0101
0.0108
0.0113
0.0119
0.009000000000000001
0.0069
0.0585
0.0031
0.0205
0.0066
0.0081
0.0016
0.0122
0.0088
0.0132
0.0051
0.0032
0.0104
0.0097
0.0137
0.0142
0.0087
0.0106

我尝试使用shell复制行为,但在这里似乎按预期工作。

>>> df = pd.Series([0.0111,0.0109,0.0097,0.0113,0.0088,0.0101,0.0108,0.0113,0.0119,0.0090])
>>> df.apply(lambda x: print(x))
0.0111
0.0109
0.0097
0.0113
0.0088
0.0101
0.0108
0.0113
0.0119
0.009
0    None
1    None
2    None
3    None
4    None
5    None
6    None
7    None
8    None
9    None
dtype: object

如何摆脱df [fieldName] .apply(lambda x:print(x))(0.00000000000000001从0.0090)的额外精度?

python lambda precision series
1个回答
0
投票

当尝试对数据集执行任何基于行的迭代时,问题会随机发生。我也可以通过使用.iterrows()来获得相同的行为。

但是当我使用float_precision ='high'作为read_csv的参数时,我会在使用lambda或iterrows时看到更多预期的行为。

df = pd.read_fwf(currentFile, parse_dates=False, skiprows=HeaderPos, skipfooter=0,  widths=width, header=forceHeader, float_precision= 'high')
© www.soinside.com 2019 - 2024. All rights reserved.