Pandas在推断dyp的时候会看错数字

2024-04-26 04:31:21 发布

您现在位置:Python中文网/ 问答频道 /正文

pandas中的read\u csv默认情况下,读取一列缺少Float64值的数字,并将数字取错。我想了解为什么read\u csv选择了一种不合适的数据类型,以及除了手动指定所需的数据类型之外是否有其他解决方法。你知道吗

我尝试导入的csv文件如下所示:

var1,var2
20190121080540088085780399,
20190121081907086084200299,-3510076284811963185
20190121082131086094750399,
20190121082828088034200299,
20190121083251091014220199,-8914359668388912530

var2是读取错误的列

我导入带有read\u csv的文件,但不指定dtype=myself:

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

==>;为什么不为var选择合适的数据类型?例如var1,数据类型是object,这很好。 有没有办法强迫你把大量的数字读作object而不是float64? 我可以自己指定数据类型。。。但如果可以的话,我想避免这种情况,因为我想编写一个函数,即使列的名称发生了变化,我也可以重用它。你知道吗


Tags: csvpandasdfreadobject情况数字null