如何从数据框的float(float64)中提取十进制数部分?(这是一个非常普遍的场景,但我在 StackOverFlow 上找不到解决方案)
注意:关于 196.09
,我需要的是 09
,而不是 9
。
示例数据框:
dollars Count
0 56.46 2
1 196.09 3
2 78.12 2
期望结果为2个小数位:
decimal
0 46
1 09
2 12
如何从数据框的float(float64)中提取十进制数部分?(这是一个非常普遍的场景,但我在 StackOverFlow 上找不到解决方案)
注意:关于 196.09
,我需要的是 09
,而不是 9
。
示例数据框:
dollars Count
0 56.46 2
1 196.09 3
2 78.12 2
decimal
0 46
1 09
2 12
numpy.modf
函数,乘以100
并转换为整数
:df['decimal'] = (np.modf(df['dollars'])[0] * 100).astype(int)
df['decimal'] = df['dollars'].astype(str).str.split('.').str[1].astype(int)
print (df)
dollars Count decimal
0 56.46 2 46
1 196.69 3 68
2 78.12 2 12
编辑:如果需要 09
格式,需要使用第二种解决方案 - 输出为 字符串
:
df['decimal'] = df['dollars'].astype(str).str.split('.').str[1]
print (df)
dollars Count decimal
0 56.46 2 46
1 196.09 3 09
2 78.12 2 12
替代方案1
另一种方法是将 dollars
转换为字符串,然后使用正则表达式提取 .
后面的所有内容:
df['decimal'] = df.dollars.astype(str).str.extract('\.(.*)').astype(int)
>>> df
dollars Count decimal
0 56.46 2 46
1 196.69 3 69
2 78.12 2 12
替代方案2
或者,您可以从美元的整数部分减去dollars
,然后乘以100:
df['decimal'] = (df.dollars.sub(df.dollars.astype(int))).mul(100).astype(int)
>>> df
dollars Count decimal
0 56.46 2 46
1 196.69 3 68
2 78.12 2 12
09
而不是9
)。在这种情况下,它必须显示为字符串,而不是int
。如果省略astype(int)
,我上面概述的第一种方法仍然适用:df['decimal'] = df.dollars.astype(str).str.extract('\.(.*)')
>>> df
dollars Count decimal
0 56.46 2 46
1 196.09 3 09
2 78.12 2 12
zfill
在处理后进行格式化:df['decimal'] = df['decimal'].astype(str).str.zfill(2)
%
广播。s = df.dollars % 1 * 100
0 46.0
1 69.0
2 12.0
Name: dollars, dtype: float64
s.astype(int)
0 46
1 69
2 12
196.09
返回09
。您可以选择获得字符串结果(而不是整数,速度慢,无法进一步进行算术运算),或者(更好的方式)可以使用整数结果,只需记住在显示时使用f'{number:02d}'
或者'{:02d}'.format
。或者简单地设置pd.options.display.float_format = '{:02d}'.format
,或参见如何使用列的格式化字符串显示浮点数的 pandas DataFrame?。 - smci