polars(python-api):read_json 无法解析日期

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

我想从包含标准 iso 格式“yyyy-mm-dd”的日期的 json 字符串中读取极坐标数据帧。 当我尝试读取字符串并使用

schema
schema_override
设置日期列的 dtype 时,这只会导致 NULL 值。

MRE

from datetime import datetime, timedelta
from io import StringIO

import polars as pl

# Generate a list of dates
start_date = datetime.today()
dates = [start_date + timedelta(days=i) for i in range(100)]
date_strings = [date.strftime("%Y-%m-%d") for date in dates]

# Create a Polars DataFrame
df = pl.DataFrame({"dates": date_strings})

df_reread = pl.read_json(
    StringIO(df.write_json()),
    schema_overrides={"dates": pl.Date},
)

输出

print(df_reread)

错误

shape: (100, 1)
┌───────┐
│ dates │
│ ---   │
│ date  │
╞═══════╡
│ null  │
│ null  │
│ null  │
│ null  │
│ null  │
│ …     │
│ null  │
│ null  │
│ null  │
│ null  │
│ null  │
└───────┘

问题

有没有办法从 json 字符串中正确读取日期数据类型?

python json python-polars
1个回答
0
投票
从 JSON 读取时,pl.read_json() 不会自动推断或正确处理日期类型,因为 JSON 本身不支持日期类型。日期通常在 JSON 中表示为字符串,您可以在读取 JSON 后将列显式转换为 Date。试试这个

from datetime import datetime, timedelta from io import StringIO import polars as pl # Generate a list of dates start_date = datetime.today() dates = [start_date + timedelta(days=i) for i in range(100)] date_strings = [date.strftime("%Y-%m-%d") for date in dates] # Create a Polars DataFrame df = pl.DataFrame({"dates": date_strings}) # Write DataFrame to JSON and read it back in df_reread = pl.read_json(StringIO(df.write_json())) # Explicitly cast the 'dates' column to Date type df_reread = df_reread.with_columns([ pl.col("dates").str.strptime(pl.Date, "%Y-%m-%d") ]) print(df_reread)
    
© www.soinside.com 2019 - 2024. All rights reserved.