pandas read_csv import为列提供混合类型

时间:2014-08-27 15:11:52

标签: python pandas

我有一个包含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

为什么会这样?

2 个答案:

答案 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类型的行数