read_csv读取一列缺少值的数字为Float64,并弄错了数字。我想了解为什么read_csv选择了不合适的数据类型,并且除了手动指定我想要的数据类型之外,是否还有其他解决方法。
我要导入的csv文件如下所示:
var1,var2
20190121080540088085780399,
20190121081907086084200299,-3510076284811963185
20190121082131086094750399,
20190121082828088034200299,
20190121083251091014220199,-8914359668388912530
而var2是read_csv无法正确读取的列
我使用read_csv导入文件,但未指定dtype =我自己:
import pandas as pd
df = pd.read_csv("/Outputs/test.csv").fillna(0) # read the file
df["var3"]=df["var2"].astype("int64") # var3 displays the var2 as Int
df
它为var2返回错误的值:
var1 var2 var3
0 20190121080540088085780399 0.000000e+00 0
1 20190121081907086084200299 -3.510076e+18 -3510076284811963392
2 20190121082131086094750399 0.000000e+00 0
3 20190121082828088034200299 0.000000e+00 0
4 20190121083251091014220199 -8.914360e+18 -8914359668388912128
var2没有正确的值(例如-3510076284811963392而不是-3510076284811963185)。我怀疑是因为float64不足以容纳这些大数字。
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
var1 5 non-null object
var2 5 non-null float64
var3 5 non-null int64
dtypes: float64(1), int64(1), object(1)
memory usage: 192.0+ bytes
==>为什么read_csv不为var选择合适的数据类型?例如var1,dtype是object,可以。 有什么方法可以强制to_csv读取大数字而不是float64作为对象? 我可以自己指定dtype ...但是我想避免这样的情况,即使我希望编写一个函数,即使列名更改,我也可以重用。