通过阅读带有pandas的制表符分隔文件,我得到一个数据框,其中包含可以使用to_numeric()
转换为数字的字符串,但大多数数字都非常小,甚至{ {1}}精度不足(例如float64
)
将它们设置为1,234e-4500
不是一种选择(计算,绘图和区分)。因此,尾数和指数应分别找到数据帧的方式。
如何最容易地转换字符串并将两个值保持为数字?
提前感谢您的帮助!
答案 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所指出的,如果问题允许该解决方案,则数据的规范化应该是首选方法。