如何为dask.dataframe指定元数据

时间:2016-09-01 07:33:58

标签: python pandas dask

文档提供了很好的示例,how metadata can be provided。但是,当我为数据帧选择正确的dtypes时,我仍然感到不确定。

  • 我可以执行meta={'x': int 'y': float, 'z': float}而不是meta={'x': 'i8', 'y': 'f8', 'z': 'f8'}吗?
  • 有人可以提醒我一个像'i8'这样的可能值列表吗?什么 dtypes存在吗?
  • 如何指定包含任意对象的列?如何指定仅包含一个类的实例的列?

2 个答案:

答案 0 :(得分:5)

可用的基本数据类型是通过numpy提供的类型。请查看documentation以获取列表。

此套装中未包含日期时间格式(例如datetime64),可在pandasnumpy文档中找到其他信息。

dask数据帧的元参数通常需要一个空的pandas数据帧,其中包含列,索引和dtypes的定义。

构建此类DataFrame的一种方法是:

import pandas as pd
import numpy as np
meta = pd.DataFrame(columns=['a', 'b', 'c'])
meta.a = meta.a.astype(np.int64)
meta.b = meta.b.astype(np.datetime64)

还有一种方法可以为pandas数据帧的构造函数提供一个dtype,但是,我不知道如何为每个列提供它们。如您所见,不仅可以提供数据类型的“名称”,还可以提供实际的numpy dtype。

关于您的上一个问题,您要查找的数据类型是“object”。例如:

import pandas as pd

class Foo:
    def __init__(self, foo):
        self.bar = foo

df = pd.DataFrame(data=[Foo(1), Foo(2)], columns=['a'], dtype='object')
df.a
# 0    <__main__.Foo object at 0x00000000058AC550>
# 1    <__main__.Foo object at 0x00000000058AC358>

答案 1 :(得分:2)

Dask.dataframe和Pandas都使用NumPy dtypes。特别是,你可以传递给np.dtype的任何东西。这包括以下内容:

  1. NumPy dtype对象,例如np.float64
  2. Python类型对象,例如float
  3. NumPy dtype字符串,例如'f8'
  4. 以下是来自NumPy文档的更广泛的列表:http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#specifying-and-constructing-data-types