如何为dask.dataframe指定元数据

Arc*_*ast 15 python pandas dask

文档提供了很好的示例,如何提供元数据.但是,当我为数据帧选择正确的dtypes时,我仍然感到不确定.

  • 我可以做一些meta={'x': int 'y': float, 'z': float}代替meta={'x': 'i8', 'y': 'f8', 'z': 'f8'}吗?
  • 有人可以提示我一个像'i8'这样的可能值列表吗?存在什么类型?
  • 如何指定包含任意对象的列?如何指定仅包含一个类的实例的列?

sim*_*sim 7

可用的基本数据类型是通过numpy提供的数据类型。请查看文档列表。

日期时间格式(例如datetime64)未包括在此集合中,有关其他信息,请参见熊猫numpy文档。

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)
Run Code Online (Sandbox Code Playgroud)

还有一种向熊猫数据框的构造函数提供dtype的方法,但是,我不确定如何为每个单独的列提供它们。如您所见,不仅可以提供数据类型的“名称”,还可以提供实际的numpy dtype。

关于您的最后一个问题,您正在寻找的数据类型是“对象”。例如:

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>
Run Code Online (Sandbox Code Playgroud)


MRo*_*lin 5

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

  1. NumPy dtype 对象,例如 np.float64
  2. Python 类型对象,例如 float
  3. NumPy dtype 字符串,例如 'f8'

这是从 NumPy 文档中获取的更广泛的列表:http : //docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#specifying-and-constructing-data-types