Python 熊猫会在没有任何警告的情况下截断我的数据并导致无法修复的数据丢失吗?
预期产出:Python 熊猫会在没有任何警告的情况下截断我的数据并导致无法修复的数据丢失吗?,python,pandas,floating-point,truncate,Python,Pandas,Floating Point,Truncate,预期产出: import pandas as pd import io indata = io.StringIO("c\n10000000000") df = pd.read_csv(indata, header=0) print(df) indata.seek(0) df = pd.read_csv(indata, header=0, dtype={"c":int}) print(df) 实际产量: c 0 1000
import pandas as pd
import io
indata = io.StringIO("c\n10000000000")
df = pd.read_csv(indata, header=0)
print(df)
indata.seek(0)
df = pd.read_csv(indata, header=0, dtype={"c":int})
print(df)
实际产量:
c
0 10000000000
c
0 10000000000
熊猫可以在没有任何警告的情况下以这种方式截断我的数据吗
我绞尽脑汁想弄明白为什么我的脚本不起作用(当然这是一个玩具示例,我的脚本更复杂)。在45分钟的绝望之后(同时尝试找出pandas分配给我的列的数据类型),我刚刚发现了上述行为
我在真实脚本中设置了dtype
,因为pandas一直将该列作为float
加载,但我需要它作为int
进行比较
编辑:评论中要求的其他信息:
Python版本
c
0 10000000000
c
0 1410065408
熊猫版本:1.1.3
站台:
Python 3.8.5 (default, Sep 3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
我知道这里发生了什么。从: 数据类型列的名称或目录->类型,可选 数据或列的数据类型。例如,
{'a':np.float64,'b':np.int32,'c':'Int64'}
使用str
或object
以及合适的na_值
设置来保留和不解释数据类型。如果指定了转换器,则将应用它们而不是数据类型转换
因此,在大写字母中提到,read\u csv()
将使用数据类型转换器(如果您指定)。因此,传递int
就像明确告诉它使用与int
等价的numpy。这就是为什么没有警告,应该将其视为预期行为
现在,问题是为什么我的numpy等价物
int
是int32
而不是int64
?
numpy()将python的int
映射到内置标量np.int
,并带有以下警告:
指定内置标量np.int\uu
依赖于平台:
TL;DRint(python)->int(numpy)->long(C)
所以,问题是long
对您的系统意味着什么
对于MSC,long
为4字节,如图所示:
并由numpy确认:
对于GCC,long
为8字节,如下所示:
希望这是有用的,你学到了一些新东西。熊猫版对我来说很好'1.0.5'@sushanth可能是平台原因吧?我在Windows10上安装了带有Python 3.8的condax64@sushanth我认为对你有效的唯一方法是默认使用64位int。。。您使用的是哪个平台?打印
platform.platform()
,platform.processor()
,也许platform.version()
会提供更多细节。对我来说也很好。我的pd.\uuuuu版本\uuuuu
->1.1.4
,ubuntu 20.04 Focus fosaI将在之后更仔细地阅读它,但我仍然无法解释为什么熊猫会默默地阅读它。。。我从来没有想过它会剪切和截断我的数据,导致数据丢失
>>> platform.platform()
'Windows-10-10.0.18362-SP0'
>>> platform.processor()
'Intel64 Family 6 Model 158 Stepping 10, GenuineIntel'
>>> platform.version()
'10.0.18362'