0

我有大量数据已读入 dask 数据帧。这个数据框有两列我认为是多余的(即具有相同的值)。这些列是字符串值——它们给出了用于培养细胞菌落的生长培养基的名称。

我想在删除其中一列之前检查我的假设,即这两列是相同的。

我能想到的最简单的解决方案如下:

(df['growth_media_1'] == df['growth_media_2']).all().compute()

但这给了我以下错误:

ValueError: Mismatched dtypes found in `pd.read_csv`/`pd.read_table`.

+--------+---------+----------+
| Column | Found   | Expected |
+--------+---------+----------+
| input  | float64 | int64    |
| output | float64 | int64    |
+--------+---------+----------+

Usually this is due to dask's dtype inference failing, and
*may* be fixed by specifying dtypes manually by adding:

dtype={'input': 'float64',
       'output': 'float64'}

我认为这可能是因为列中有一些NaN',所以我.dropna()在比较之前尝试了做。但这并没有解决问题。

经过大量的挥舞,我最终得到了这个神秘的混乱:

(df['growth_media_1'].dropna() == df['growth_media_2'].dropna()).astype('bool').all().compute()

但即使这样也没有解决我的问题。

据我所知,该错误消息确实没有帮助,因为既不涉及pd.read_csv也不涉及。pd.read_table但是,pandas.read_text在回溯中,所以也许 dask 正在为不同的数据分片写入文件。

(我使用的是 dask 版本 1.2.2,如果有帮助的话。我在高性能集群上使用它,它落后于软件的前沿。)

4

2 回答 2

0

其实,我想通了。

我需要做的是最初读取带有assume_missing=True参数的数据。像这样:

df = dd.read_csv('r1c5va879uaex_r1c639xp952g4.csv', assume_missing=True)

之后,简单的

(df['growth_media_1'] == df['growth_media_2']).all().compute()

工作得很好。加载 Dataframe 后,我无法弄清楚如何修复 dtype 分配(使用astype()并没有解决我的问题)。

该错误消息几乎具有可笑的误导性,因为它告诉我修复 的调用pd.read_csv,而这是dask.dataframe.read_csv我需要修复的调用。

于 2021-01-06T02:08:09.680 回答
0

这可能是因为您的 Dask 数据框中的类型不一致。如果不查看您的数据,很难找出问题所在。但是您可能可以执行以下操作来强制类型。

df[['growth_media_1', 'growth_media_2']] = df[['growth_media_1', 'growth_media_2']].astype('float64')
(df['growth_media_1'] == df['growth_media_2']).all().compute()

于 2021-01-06T00:59:18.247 回答