Python 读取csv文件时使用混合类型。原因、修复和后果

Python 读取csv文件时使用混合类型。原因、修复和后果,python,csv,pandas,Python,Csv,Pandas,熊猫发出这一警告时会发生什么?我应该担心吗 In [1]: read_csv(path_to_my_file) /Users/josh/anaconda/envs/py3k/lib/python3.3/site-packages/pandas/io/parsers.py:1139: DtypeWarning: Columns (4,13,29,51,56,57,58,63,87,96) have mixed types. Specify dtype option on import or se

熊猫发出这一警告时会发生什么?我应该担心吗

In [1]: read_csv(path_to_my_file)
/Users/josh/anaconda/envs/py3k/lib/python3.3/site-packages/pandas/io/parsers.py:1139: 
DtypeWarning: Columns (4,13,29,51,56,57,58,63,87,96) have mixed types. Specify dtype option on import or set low_memory=False.              

  data = self._reader.read(nrows)
我假设这意味着Pandas无法从这些列上的值推断类型。但是如果是这样的话,熊猫最终会为这些列使用什么类型

此外,该类型是否总是在事后恢复?(在收到警告后),或者在某些情况下,我可能无法正确恢复原始信息,我应该预先指定类型


最后,
low\u memory=False
到底是如何解决这个问题的?

low\u memory
显然是,所以我不想麻烦它

警告表示列中的某些值具有一种数据类型(例如
str
),而某些值具有不同的数据类型(例如
float
)。我相信pandas使用的是最低的通用超类型,在我使用的示例中是
object


你应该检查你的数据,或者在这里发布一些。特别是,查找缺少的值或格式不一致的
int
/
float
值。如果您确定数据正确,则使用
dtypes
参数帮助
pandas
退出。

重新访问mbatchkarov的链接,
内存不足。
它是:

内存不足:布尔值,默认为True

在内部以块的形式处理文件,从而在 解析,但可能是混合类型推断。确保没有 混合类型要么设置为False,要么使用dtype指定类型 参数请注意,整个文件被读取到单个数据帧中 无论如何,请使用chunksize或iterator参数返回数据 成批地。(仅对C解析器有效)

导致混合类型推断的含义是什么,chris-b1回答:

它是确定性的——类型总是根据所发生的事情推断出来的 在数据中。也就是说,内部chunksize不是一个固定的数字 行,而不是字节,因此是否可以显示混合数据类型警告 还是不可以感觉有点随意

那么,熊猫最终会使用什么类型的列呢?

下面是一个自包含的示例:

df=pd.read_csv(StringIO('\n'.join([str(x) for x in range(1000000)] + ['a string'])))
DtypeWarning: Columns (0) have mixed types. Specify dtype option on import or set low_memory=False.

type(df.loc[524287,'0'])
Out[50]: int

type(df.loc[524288,'0'])
Out[51]: str
csv数据的第一部分仅被视为int,因此转换为int, 第二部分也有一个字符串,所以所有条目都保留为字符串

事件发生后是否总能恢复该类型?(收到警告后)?

我想重新导出到csv并使用
low_memory=False重新读取应该可以完成这项工作

内存不足=错误如何解决问题?


它在决定类型之前读取所有文件,因此需要更多内存。

正如@Robert Pollak回答的那样,低内存并不是不推荐的。我首先得到了DType警告,在我使用low\u memory=False之后,该警告消失了。但是,存在以下错误
错误:C堆栈使用量528430048太接近限制错误:C堆栈使用量528429312太接近限制
。甚至在low_memory=False标志出现之前,这种情况就已经存在了。有什么办法吗?如前所述,我更改了R版本,它只工作了一次,但我现在得到了一致的错误。