df = pd.read_csv('somefile.csv')
…出现错误:
…/site-packages/pandas/io/parsers.py:1130: DtypeWarning: 列 (4,5,7,16) 具有混合类型。导入时指定 dtype 选项或设置 low_memory=False。
为什么该dtype选项与相关low_memory,以及为什么可能会有low_memory=False帮助?
dtype
low_memory
low_memory=False
当你使用 pandas 读取 CSV 文件时,出现的 DtypeWarning 与 pandas 在加载大型数据集时如何管理内存有关。让我们详细解释为什么 dtype 选项和 low_memory 选项相关,以及为什么将 low_memory 设置为 False 可能会有所帮助。
pandas
DtypeWarning
False
low_memory=True(默认值): 当 low_memory 设置为 True 时,pandas 会分块读取 CSV 文件,而不是一次性将整个文件加载到内存中。这种方法对大文件更为节省内存,但可能会导致数据类型推断问题。因为 pandas 是按块处理数据的,它可能最初为某列推断出一种数据类型,但在后面的块中发现冲突的数据类型,从而导致混合类型并触发 DtypeWarning。
low_memory=True
True
low_memory=False: 当你将 low_memory 设置为 False 时,pandas 会一次性将整个文件加载到内存中。这使得 pandas 可以更准确地推断列的数据类型,因为它可以一次性看到所有数据,从而减少在列中遇到混合类型的可能性。因此,你可能会避免 DtypeWarning。
当 low_memory=False 设置时,pandas 会将整个文件一次性加载到内存中,这样可以:
更好地推断数据类型: 由于 pandas 是一次性处理整个列的,所以它可以更准确地确定每列的正确数据类型,避免由于不一致导致的 DtypeWarning。
减少数据类型碎片化: 一次性加载文件减少了处理块时不同数据类型冲突的可能性。
为了避免警告,你可以选择:
设置 low_memory=False: python df = pd.read_csv('somefile.csv', low_memory=False)
python df = pd.read_csv('somefile.csv', low_memory=False)
明确指定 dtype(如果你知道数据类型): python df = pd.read_csv('somefile.csv', dtype={'column_name': 'desired_type'})
python df = pd.read_csv('somefile.csv', dtype={'column_name': 'desired_type'})
将 low_memory 设置为 False 会有所帮助,因为它允许 pandas 一次性读取整个 CSV 文件,从而导致更准确的数据类型推断。然而,如果你处理的是非常大的文件,你可能需要明确指定 dtype 以更高效地管理内存使用。