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版本,它只工作了一次,但我现在得到了一致的错误。