Pandas:如何创建 date32 dtype 日期时间对象?

问题描述 投票:0回答:2

我正在使用 parquet,我需要使用

date32[day]
对象来表示我的日期,但我不清楚如何使用 pandas 来生成这个确切的数据类型,而不是时间戳。

考虑这个例子:

from datetime import datetime, date
import pyarrow.parquet as pq
import pandas as pd

df1 = pd.DataFrame({'date': [date.today()]})
df1.to_parquet('testdates.parquet')
pq.read_table("testdates.parquet")  # date32[day]
# pandas version

df2 = pd.DataFrame({'date': [pd.to_datetime('2022-04-07')]})
df2.to_parquet('testdates2.parquet')
pq.read_table("testdates2.parquet")  # timestamp[us]
python pandas datetime
2个回答
4
投票

来自

pandas
pyarrow
这里

的积分
import pyarrow as pa
from datetime import date

df2 = pd.Series({'date':[date(2022,4,7)]})
df2_dat32 = pa.array(df2)

print("dataframe:", df2)
print("value of dataframe:", df2_dat32[0])
print("datatype:", df2_dat32.type)

输出

dataframe: date    [2022-04-07]
dtype: object
value of dataframe: [datetime.date(2022, 4, 7)]
datatype: list<item: date32[day]>

编辑:如果您有一整列日期,您需要首先将日期时间转换为日期,然后使用与上面相同的方法。请参阅下面的示例:

import pyarrow as pa
from datetime import date

#create pandas DataFrame with one column with five
#datetime values through a dictionary
datetime_df = pd.DataFrame({'DateTime': ['2021-01-15 20:02:11',
                                '1989-05-24 20:34:11',
                                '2020-01-18 14:43:24',
                                '2021-01-15 20:02:10',
                                '1999-04-04 20:34:11']})

datetime_df['Date'] = pd.to_datetime(datetime_df['DateTime']).dt.date

date_series = pd.Series(datetime_df['Date']) 
print(date_series)

输出:

0    2021-01-15
1    1989-05-24
2    2020-01-18
3    2021-01-15
4    1999-04-04
Name: Date, dtype: object

然后使用pyarrow进行转换:

df2_dat32 = pa.array(date_series)

print("datatype of values in the dataframe with dates:", type(date_series[0]))
print("value of dataframe after converting using pyarrow:", df2_dat32[0])
print("datatype after converting using pyarrow :", df2_dat32.type)

输出:

datatype of values in the dataframe with dates: <class 'datetime.date'>
value of dataframe after converting using pyarrow: 2021-01-15
datatype after converting using pyarrow : date32[day]

0
投票

Pandas 2.0 允许通过添加

[pyarrow]
后缀来指定 PyArrow 类型。

让我们使用您最初提供的示例:

import pandas as pd
df2 = pd.DataFrame({'date': [pd.to_datetime('2022-04-07')]})
df2.dtypes
date    datetime64[ns]
dtype: object

我们可以使用

datetime64[ns]
 方法简单地将 day32[day]
 转换为 
astype()

df2 = df2.astype({'date': 'date32[pyarrow]'})
df2.dtypes
date    date32[day][pyarrow]
dtype: object 

我们看到 Pandas 使用了预期的

date32
类型。此外,以 parquet 格式保存文件,该类型将保留:

df2.to_parquet('testdates2.parquet')
pq.read_table("testdates2.parquet")
pyarrow.Table
date: date32[day]
----
date: [[2022-04-07]]

请注意,Pandas 还没有 相当于 pyarrow 后端 date32

 类型的 Pandas 扩展类型。

© www.soinside.com 2019 - 2024. All rights reserved.