如何为dask.dataframe指定元数据

19

文档提供了很好的示例,如何提供元数据。然而,在选择适合我的数据帧的正确数据类型时,我仍感到不确定。

  • 我是否可以像这样做meta={'x': int 'y': float, 'z': float} ,而不是meta={'x': 'i8','y': 'f8','z': 'f8'}
  • 是否有人可以为我提示一份可能值的列表,例如'i8'?有哪些数据类型存在?
  • 如何指定包含任意对象的列?如何指定只包含一个类实例的列?
2个回答

11
可用的基本数据类型是通过numpy提供的。请查看文档获取列表。
不包括日期时间格式(例如datetime64),有关其附加信息可以在pandasnumpy文档中找到。
dask数据帧的元参数通常需要一个空的pandas数据帧,其中包含列、索引和数据类型的定义。
构造这样一个数据帧的方法之一是:
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>

如何确定返回数据帧中的某一列是“列表”还是“字典”? - Intelligent-Infrastructure

5

1
如果原始的csv文件使用了“转换器”来获取更丰富的类型,比如“列表”,那么在dask中指定元数据时应该指定“列表”还是只需指定“对象”? - CMCDragonkai
无论Pandas数据类型是什么,在这种情况下,我认为Pandas会使用对象dtype,但您可以自己尝试查看。 - MRocklin
我尝试使用转换器将 dask.read_csv 中的数据转换为富对象,效果很好。数据类型最终变成了对象。不过我觉得这些富对象也可以在 meta 中使用。但我不确定是否需要。似乎 meta 可以直接是 object - CMCDragonkai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接