Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫会在没有任何警告的情况下截断我的数据并导致无法修复的数据丢失吗?_Python_Pandas_Floating Point_Truncate - Fatal编程技术网

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;DR
int(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'