我正在将大型CSV文件转换为Parquet文件,以便进一步分析。我将CSV数据读入Pandas中,并按以下方式指定列dtypes
_dtype = {"column_1": "float64",
"column_2": "category",
"column_3": "int64",
"column_4": "int64"}
df = pd.read_csv("data.csv", dtype=_dtype)
然后进行更多的数据清理,并将数据写入Parquet以供下游使用。
_parquet_kwargs = {"engine": "pyarrow",
"compression": "snappy",
"index": False}
df.to_parquet("data.parquet", **_parquet_kwargs)
但是,当我使用from_parquet
将数据读入Pandas进行进一步分析时,我似乎无法恢复类别dtype。以下是
df = pd.read_parquet("data.parquet")
结果使用DataFrame
取代所需的category
,并使用object
d类型。
以下内容似乎如预期的那样起作用
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
来完成这个任务。
发布于 2019-08-30 12:12:02
这在Arrow 0.15
中是固定的,现在下一段代码将列保持为类别(而且性能要快得多):
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
发布于 2019-03-03 08:52:57
我们也遇到了类似的问题。当使用多文件拼板时,如下所示:使用熊猫()文献,以下代码可能与此相关:
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]
。
https://stackoverflow.com/questions/54731396
复制相似问题