从pandas Dataframe字符串的科学标记数字中获取电源编号

时间:2018-02-18 20:25:55

标签: python pandas precision

通过阅读带有pandas的制表符分隔文件,我得到一个数据框,其中包含可以使用to_numeric()转换为数字的字符串,但大多数数字都非常小,甚至{ {1}}精度不足(例如float64

将它们设置为1,234e-4500不是一种选择(计算,绘图和区分)。因此,尾数和指数应分别找到数据帧的方式。

如何最容易地转换字符串并将两个值保持为数字?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

如果将这两个值作为元组存储在DataFrame中非常方便,可以使用pandas.read_csv的转换函数来完成。

import pandas as pd

columns = ['a', 'b', 'c']  # list of columns to be converted
converters = {
    key: lambda x:
        (
            float(x.lower().split("e")[0].replace(",", ".")),
            int(x.lower().split("e")[1])
        ) for key in columns
}
df = pd.read_csv(
    "test.csv",   # your source file
    sep="\s+",    # tabs and whitespace as separator
    converters=converters,
)

将源文件test.csv与此

一起使用
a    b    c
1,234e-4500 2,34e-3432  9,12e-123122
结果

产生

print df
print df['a'].dtype

            a              b                c
0  (1.234, -4500)  (2.34, -3432)  (9.12, -123122)
object

Sidenote :正如vladimir所指出的,如果问题允许该解决方案,则数据的规范化应该是首选方法。