Ame*_*ina 15 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 set low_memory=False.
data = self._reader.read(nrows)
Run Code Online (Sandbox Code Playgroud)
我认为这意味着Pandas无法从这些列的值推断出类型.但如果是这种情况,Pandas最终会使用哪种类型的列?
此外,事后可以恢复类型吗?(在收到警告后),或者是否存在我可能无法正确恢复原始信息的情况,我应该预先指定类型?
最后,究竟是如何low_memory=False解决问题的?
Rob*_*lak 16
重温mbatchkarov的链接,low_memory是不会被弃用.它现在记录在案:
low_memory:布尔值,默认为True
以块的形式内部处理文件,导致在解析时使用较少的内存,但可能是混合类型推断.要确保没有混合类型,请设置False,或使用dtype 参数指定类型.请注意,整个文件都被读入单个DataFrame中,使用chunksize或iterator参数以块的形式返回数据.(仅对C解析器有效)
我问过什么导致混合型推理的意思,而chris-b1回答:
它是确定性的 - 根据数据中的内容始终推断出类型.也就是说,内部chunksize不是固定数量的行,而是字节,所以无论你是否可以混合dtype警告都会感觉有点随机.
那么,Pandas最终会使用哪种类型的列?
这可以通过以下自包含示例来回答:
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
Run Code Online (Sandbox Code Playgroud)
csv数据的第一部分被视为仅int,因此转换为int,第二部分也有一个字符串,因此所有条目都保存为字符串.
这种类型总是可以在事后恢复吗?(在收到警告后)?
我想重新导出到csv并重新阅读low_memory=False应该做的工作.
low_memory = False究竟如何修复问题?
它在决定类型之前读取所有文件,因此需要更多内存.
| 归档时间: |
|
| 查看次数: |
32329 次 |
| 最近记录: |