【问题标题】:Convert dask to pandas dataframe将 dask 转换为 pandas 数据框
【发布时间】:2020-07-28 03:46:36
【问题描述】:

我有一个非常相似的问题:Dask read_csv-- Mismatched dtypes found in `pd.read_csv`/`pd.read_table`

我正在运行以下脚本:

import pandas as pd
import dask.dataframe as dd
df2 = dd.read_csv("Path/*.csv", sep='\t', encoding='unicode_escape', sample=2500000)
df2 = df2.loc[~df2['Type'].isin(['STVKT','STKKT', 'STVK', 'STKK', 'STKET', 'STVET', 'STK', 'STKVT', 'STVVT', 'STV', 'STVZT', 'STVV', 'STKV', 'STVAT', 'STKAT', 'STKZT', 'STKAO', 'STKZE', 'STVAO', 'STVZE', 'STVT', 'STVNT'])]
df2 = df.compute()

我得到以下错误:ValueError: Mismatched dtypes found in pd.read_csv/pd.read_table

我怎样才能避免这种情况?我有超过 32 列,所以我无法预先设置 dtypes。作为提示,还写了:Specify dtype option on import or set low_memory=False

【问题讨论】:

    标签: python pandas dataframe dask


    【解决方案1】:

    当 Dask 加载您的 CSV 时,它会尝试从文件的标题中派生 dtypes,然后假定文件的其余部分对于每列具有相同的 dtypes。来自 csv 的正弦 pandas 类型取决于看到的值集,这就是错误的来源。

    要解决此问题,您要么必须明确告诉 dask 期望什么类型,要么增加 dask 尝试从 (sample=) 猜测类型的部分的大小。

    错误消息应该告诉您哪些列不匹配以及找到的类型,因此您只需要指定这些即可让事情正常进行。

    【讨论】:

      【解决方案2】:

      不妨试试这个:

      df = pd.DataFrame()
      df = df2.compute()
      

      【讨论】:

      • 这其实什么都做不了。
      • 对不起,如果我是粗鲁的,但是你的第二行重新定义了df,所以上面一行的第一个定义被忘记了。
      • 第一行是初始化。没有它,编译器将不知道 df 是什么。第二行是我将值分配给数据框的位置。
      • 这里的语言是python,不需要初始化,也没有编译器。您可以选择对变量进行类型注释,但这不是方式,您始终可以将标识符重新分配给任何类型。
      猜你喜欢
      • 1970-01-01
      • 2019-06-25
      • 2017-02-04
      • 2021-02-05
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 2019-05-14
      • 2017-01-27
      相关资源
      最近更新 更多