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

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

jez*_*ael 5

使用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)


sac*_*cuL 5

替代方案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)