Python pandas read_csv导入为列提供混合类型

Python pandas read_csv导入为列提供混合类型,python,pandas,Python,Pandas,我有一个包含130000行的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都是unicode 为什么会这样

我有一个包含130000行的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都是
unicode


为什么会这样?

正如其他人所指出的,您的数据可能格式不正确,比如有引号之类的东西

试着做:

import pandas as pd
import numpy as np

df = pd.read_csv("data.csv", dtype={"CallGuid": np.int64})

它的内存效率也更高,因为pandas不必猜测数据类型。

好的,我遇到了同样的问题,症状也一样: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之间有一条有问题的线


为了更精确地定位它们,您只需使用较小的chunksize并仅打印不具有正确dta类型的行数

您在原始csv中检查过该行了吗?它可能被引用或有其他问题,如果您执行
df=pd.read_csv(“data.csv”,skiprows=32768)
数据类型是否错误?@EdChum在输入skiprows=32768后,我丢失了第0行中的列名,如何保留标题行?执行
skiprows=[32768]
。在
skiprows=[32768]
之后,您跳过了前32768行而没有
[]
,我仍然有
df[“CallGuid”][32767]
作为
long
df[“CallGuid”][32768]
作为
unicode
的关键是原始数据是否格式错误,您需要检查原始csv是否有格式错误的数据,否则您可以在加载后通过执行
df[CallGuid']=df['CallGui']来修复此问题。astype(int64)