mir*_*avi 2 python python-polars
我正在尝试将相当混乱的 Excel 文件读取到 Polars 数据帧,但收到“XlsxValueError:错误:潜在无效的日期格式。”。
我认为该问题与某些采用 Excel 数字日期格式的日期列值有关,从而引发错误。有没有办法让我对 Polars 或 Xlsx2csv 选项进行设置,我希望将列读取为字符串类型,而不是尝试转换为日期。我尝试将 infer_schema_length 设置为 0 以将列读取为字符串,但看起来它已经是 xlsx2csv writer 引发了错误。
我的代码目前如下:
pl.read_excel(file="file_path",
sheet_name="sheet_name",
read_csv_options={"infer_schema_length":0},
xlsx2csv_options={"skip_hidden_rows":False})
Run Code Online (Sandbox Code Playgroud)
出去:
XlsxValueError: Error: potential invalid date format.
Run Code Online (Sandbox Code Playgroud)
当使用 Pandas read_excel 读取数据时,它不会引发错误。当尝试将 Pandas df 转换为极坐标时,会引发错误:
df = pd.read_excel("file_name",
sheet_name="sheet_name")
pl.from_pandas(df)
Run Code Online (Sandbox Code Playgroud)
出去:
ArrowTypeError: Expected bytes, got a 'int' object
Run Code Online (Sandbox Code Playgroud)
我当前的解决方法(不理想)是使用 Pandas 以字符串格式读取数据,然后转换为 Polars 数据帧并开始清理数据。
感谢 @jquurious,因为他发现您可以将 format_type 参数传递给 xlsx2csv_options,后者将日期列读取为字符串。
下面的工作代码读取数据并避免错误
pl.read_excel(source="file_path",
sheet_name="sheet_name",
xlsx2csv_options={"ignore_formats":["date"]})
Run Code Online (Sandbox Code Playgroud)
编辑 22 年 4 月 17 日:
另外,尽管我使用了“ignore_formats”:[“date”],但我的 Excel 文件仍引发相同的错误。然后,解决方法是忽略“float”的格式,并在 Xlsx2csv writer 中将所有内容读取为字符串,如下所示:
pl.read_excel(
source=r"path\file.xlsx",
sheet_name="sheet_name",
xlsx2csv_options={"skip_hidden_rows": False, "ignore_formats": ["float"]},
read_csv_options={"infer_schema_length": 0},
)
Run Code Online (Sandbox Code Playgroud)