名称错误:名称'int64'未定义。

8

我对pandas相对较新,在尝试定义数据类型以读取大文件时,出现以下错误:NameError: name 'int64' is not defined

我确保已安装和更新了pandas和numpy,但据我所知,这是一个Python错误。 我已经查看了一些教程,没有人遇到过这个问题。请查看下面返回错误的代码:

import pandas as pd
import numpy as np

data = pd.read_csv("file.csv", encoding="utf-16le", dtype={
    "time": int64,
    "created_date_sk": int64,
    "eventType": object,
    "itemId": int64,
    "fieldId": int64,
    "userId": int64
})

data.head()

完整的跟踪信息:

Traceback (most recent call last): File "manipulate.py", line 5, in module "time": int64, NameError: name 'int64' is not defined

我本以为会识别 int64 类型,但实际上似乎只能读取 int 类型。对象类型似乎可以正常工作。


4
将其更改为 np.int64 - Amadan
1
谢谢!这样就解决了错误。现在出现了一个新问题,所以我会继续研究再发帖。 - andy
4个回答

8

解释器告诉你它无法识别,因为int64属于numpy。

将你的代码更改为以下内容(它会抱怨在我的文件系统中没有file.csv,但这是正常的):

import pandas as pd
import numpy as np

data = pd.read_csv("file.csv", encoding="utf-16le", dtype={
    "time": np.int64,
    "created_date_sk": np.int64,
    "eventType": object,
    "itemId": np.int64,
    "fieldId": np.int64,
    "userId": np.int64
})

data.head()

更好的方式是,在开头导入它:
from numpy import int64

很高兴能够帮到您。如果您不介意的话,请给这个答案评分 :) 谢谢。 - cabreracanal
1
我做了,但是我没有足够的声望来显示我相信。 - andy

3
您之所以会收到此错误,是因为本地python命名空间中未定义 int64。因此,在字典中使用它会引发错误。您可以采取以下几种方法来解决此问题。
选项1:使用字符串 最简单的选项是在字符串中包含数据类型。只需将dtype字典中的int64更改为"int64"即可。
选项2:使用numpy 将int64更改为np.int64(请注意,这需要导入numpy包)。
我喜欢选项2。

3

只需使用intpandas中的dtype int64映射到Python的int

import pandas as pd
import numpy as np

data = pd.read_csv("file.csv", encoding="utf-16le", dtype={
    "time": int,
    "created_date_sk": int,
    "eventType": object,
    "itemId": int,
    "fieldId": int,
    "userId": int
})

data.head()

0

你正在将 int64 作为变量传递,你必须将其作为字符串传递,使用下面给出的代码:

import pandas as pd
import numpy as np

data = pd.read_csv("file.csv", encoding="utf-16le", dtype={
"time": 'int64',
"created_date_sk": 'int64',
"eventType": 'object',
"itemId": 'int64',
"fieldId": 'int64',
"userId": 'int64'
})

data.head()

希望它能对你有所帮助。


其他答案清楚地表明,您不必将其作为字符串传递。 - Amadan
@Amadan 如果你不是将其作为字符串传递,那么你必须使用 from numpy import int64,现在你也可以不使用字符串。 - Rahul charan
@Amadan 你可以使用任何选项,输出结果都是相同的。 :) - Rahul charan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接