我有一个包含130,000行的csv文件。用pandas'读完文件后read_csv函数,其中一个列(" CallGuid")具有混合对象类型。
我做了:
df = pd.read_csv("data.csv")
然后我有了这个:
In [10]: df["CallGuid"][32767]
Out[10]: 4129237051L
In [11]: df["CallGuid"][32768]
Out[11]: u'4129259051'
所有行< = 32767的类型为long
,所有行> 32767是unicode
为什么会这样?
答案 0 :(得分:4)
正如其他人所指出的那样,您的数据可能会格式不正确,例如有引号或其他内容......
试着这样做:
import pandas as pd
import numpy as np
df = pd.read_csv("data.csv", dtype={"CallGuid": np.int64})
它还具有更高的内存效率,因为大熊猫不必猜测数据类型。
答案 1 :(得分:1)
好的我刚刚遇到了同样的问题,症状相同:df [column] [n]在n> 32767之后改变了类型
我确实在我的数据中遇到了问题,但在第32767行根本没有问题
找到并修改这些有问题的行解决了我的问题。 我设法通过使用以下非常脏的例程来本地化有问题的行:
df = pd.read_csv('data.csv',chunksize = 10000)
i=0
for chunk in df:
print "{} {}".format(i,chunk["Custom Dimension 02"].dtype)
i+=1
我跑了这个,我获得了:
0 int64
1 int64
2 int64
3 int64
4 int64
5 int64
6 object
7 int64
8 object
9 int64
10 int64
其中告诉我,在60000和69999之间(至少)存在一条有问题的线路,其中一条线路在80000和89999之间
要更精确地对它们进行本地化,您可以采用较小的块大小并仅打印没有正确dta类型的行数