Lea*_*arn 4 dataframe python-3.x pandas
非常常见的场景,但我在 StackOverFlow 中找不到解决方案,如何从数据帧中的浮点数中提取所有小数?
示例数据帧
dollars Count
0 56.46 2
1 196.09 3
2 78.12 2
Run Code Online (Sandbox Code Playgroud)
预期结果
decimal
0 46
1 09
2 12
Run Code Online (Sandbox Code Playgroud)
小心 196.09,我需要 09,而不是 9
使用numpy.modf, 多个 by100并强制转换为integers:
df['decimal'] = (np.modf(df['dollars'])[0] * 100).astype(int)
Run Code Online (Sandbox Code Playgroud)
或split通过.:
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
Run Code Online (Sandbox Code Playgroud)
编辑:如果需要09格式需要第二个解决方案 - 输出是strings:
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
Run Code Online (Sandbox Code Playgroud)
替代方案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
Run Code Online (Sandbox Code Playgroud)
替代方案2
或者,您可以减去美元dollars部分int,然后乘以 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
Run Code Online (Sandbox Code Playgroud)
编辑:根据对OP问题的编辑,似乎小数部分需要显示为2个小数点(例如,它需要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
Run Code Online (Sandbox Code Playgroud)
zfill或者,如果我们已经将小数部分作为 int 的话,这可以在事后使用 来完成:
df['decimal'] = df['decimal'].astype(str).str.zfill(2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3641 次 |
| 最近记录: |