我有一个带有以下列(dtype ='O')的数据框:
OUTPUT
1
0
3e-09
NaN
0.4
5.67
并想为数字小于0的小数位数添加新列:
OUTPUT DECIMAL_PLACES
1 0
0 0
3e-09 9
NaN NaN
0.4 1
5.67 0
我已经天真地尝试将其转换为字符串,然后转换为split('。'),但科学记法并不喜欢它。注意:我有一个很大的数据集,要看一看科学计数法在哪里并不容易。
答案 0 :(得分:3)
从本质上讲,这是-log10
操作。例如:
>>> -np.floor(np.log10(df['data']))
0 -0.000000
1 inf
2 9.000000
3 NaN
4 1.000000
Name: data, dtype: float64
0
映射到inf
上。但是我们可以稍后解决。例如:
df['places'] = -np.floor(np.log10(df['data']))
df.loc[np.isinf(df['places']), 'places'] = 0
这给我们:
>>> df
data places
0 1.000000e+00 -0.0
1 0.000000e+00 0.0
2 3.000000e-09 9.0
3 NaN NaN
4 4.000000e-01 1.0