Python从数据帧中的float64获取十进制数

时间:2018-08-01 16:39:47

标签: python-3.x pandas dataframe

非常常见的情况,但是我在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

3 个答案:

答案 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