首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫DataFrame的分类列从一个Parquet文件使用read_parquet?

熊猫DataFrame的分类列从一个Parquet文件使用read_parquet?
EN

Stack Overflow用户
提问于 2019-02-17 08:23:09
回答 2查看 8.2K关注 0票数 10

我正在将大型CSV文件转换为Parquet文件,以便进一步分析。我将CSV数据读入Pandas中,并按以下方式指定列dtypes

代码语言:javascript
运行
复制
_dtype = {"column_1": "float64",
          "column_2": "category",
          "column_3": "int64",
          "column_4": "int64"}

df = pd.read_csv("data.csv", dtype=_dtype)

然后进行更多的数据清理,并将数据写入Parquet以供下游使用。

代码语言:javascript
运行
复制
_parquet_kwargs = {"engine": "pyarrow",
                   "compression": "snappy",
                   "index": False}

df.to_parquet("data.parquet", **_parquet_kwargs)

但是,当我使用from_parquet将数据读入Pandas进行进一步分析时,我似乎无法恢复类别dtype。以下是

代码语言:javascript
运行
复制
df = pd.read_parquet("data.parquet")

结果使用DataFrame取代所需的category,并使用object d类型。

以下内容似乎如预期的那样起作用

代码语言:javascript
运行
复制
import pyarrow.parquet as pq

_table = (pq.ParquetFile("data.parquet")
            .read(use_pandas_metadata=True))

df = _table.to_pandas(strings_to_categorical=True)

但是,我想知道如何使用pd.read_parquet来完成这个任务。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-30 12:12:02

这在Arrow 0.15中是固定的,现在下一段代码将列保持为类别(而且性能要快得多):

代码语言:javascript
运行
复制
import pandas

df = pandas.DataFrame({'foo': list('aabbcc'),
                       'bar': list('xxxyyy')}).astype('category')

df.to_parquet('my_file.parquet')
df = pandas.read_parquet('my_file.parquet')
df.dtypes
票数 11
EN

Stack Overflow用户

发布于 2019-03-03 08:52:57

我们也遇到了类似的问题。当使用多文件拼板时,如下所示:使用熊猫()文献,以下代码可能与此相关:

代码语言:javascript
运行
复制
import pyarrow.parquet as pq
dft = pq.read_table('path/to/data_parquet/', use_pandas_metadata=True)
df = dft.to_pandas(categories=['column_2'] )

use_panadas_metadata适用于dtype datetime64[ns]

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54731396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档