非常常见的情况,但是我在StackOverFlow中找不到解决方案,如何从数据帧中的浮点中提取所有小数点?
sample dataFrame
dollars Count
0 56.46 2
1 196.09 3
2 78.12 2
预期结果
decimal
0 46
1 09
2 12
请小心196.09,我需要09,而不是9
答案 0 :(得分:4)
使用numpy.modf
,乘以100
并强制转换为integer
s:
df['decimal'] = (np.modf(df['dollars'])[0] * 100).astype(int)
或用split
的{{1}}:
.
编辑:如果需要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
s:
string
答案 1 :(得分:3)
替代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
部分中减去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
编辑:根据对OP问题的编辑,似乎小数部分需要显示为2个小数点(例如应为{{ 1}},而不是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
答案 2 :(得分:1)
如果您知道自己有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