将混合类型 DF 列中的浮点数转换为字符串使用科学记数法

Posted

技术标签:

【中文标题】将混合类型 DF 列中的浮点数转换为字符串使用科学记数法【英文标题】:Converting Floats to String in Mixed Type DF Column Uses Scientific Notation 【发布时间】:2019-10-03 18:50:58 【问题描述】:

我有一个数据框,其中有一列正在以混合类型读入。

df = pd.DataFrame('mix':['a',6,0.23423,False, 0.000023425])

我想将列转换为字符串,但是当我这样做时,任何长小数都会转换为科学记数法。如何以十进制表示法保留所有小数?

df.astype(str)
    mix
0   a
1   6
2   0.23423
3   False
4   2.3425e-11

期望的输出:

    mix
0   a
1   6
2   0.23423
3   False
4   0.000000000023425

【问题讨论】:

【参考方案1】:

可以使用numpy的format_float_positional函数,如下。

import numpy as np

df = pd.DataFrame('mix':['a',6,0.23423,False, 0.000000000023425])

def custom_str(x):
    if isinstance(x, float):
        return np.format_float_positional(x)
    return str(x)

df['mix'].apply(custom_str)

输出:

0                    a
1                    6
2              0.23423
3                False
4    0.000000000023425

【讨论】:

如果x 已经是float 的一个实例,那你为什么还要让它float(x) 呢?另外,为什么try/catch 块? np.format_float_positional 是否有可能引发错误? 好地方!它们是原始方法失败的残余物。我已经更新了答案。

以上是关于将混合类型 DF 列中的浮点数转换为字符串使用科学记数法的主要内容,如果未能解决你的问题,请参考以下文章

如何将小数字转换为python中的浮点数? [复制]

如何用 NA 替换列中的字符串值并将列转换为浮点数?

无法将字符串转换为 pandas 中的浮点数(ValueError)

将字符串中的数字转换为 c 中的浮点数:atof()、strtof() 不起作用

使用有限的类 C 库将科学计数法字符串中的数字转换为浮点数

DataFrame:从一列中的字符串字典到两列中的浮点数 'latitude': '34.04', 'longitude': '-118.24' [重复]