Python Polars 写入/读取 csv 换行符处理(eol)

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

我想读取包含换行符 (eol) 字符的模型数据。 这里我利用 faker 包来模拟一些数据。

我初始化一个 Polars.DataFrame 并将其写入 .csv。当我稍后尝试读取 csv 时 (见下文),我收到一个错误,这表明列名、数据类型 (

schema_overrides
) 和数据之间的匹配不匹配。

我最好的猜测是,该错误是由于行字段中的换行符/eol 造成的。如果我注释掉地址字段的生成,它就会顺利运行。现在如何最好地处理带有换行符的字符串?我认为这应该通过

quote_char
(默认=
"
)和
quoting_style
中的
df.write_csv
link

来捕获

错误

pydf = PyDataFrame.read_csv( Polars.exceptions.ComputeError:无法将“Date_of_birth”列(列号)处的

"Edwards, Duncan and Moore"
解析为 dtype
date
5)

文件中的当前偏移量为 309563 字节。

产生错误的代码

# Reading in throws an error
df_throws = pl.read_csv("mockme_up.csv", schema_overrides=dtypes, separator=";")

MRE数据

import polars as pl
from faker import Faker

fake = Faker()
# Erstellung der Mockup-Daten unter Verwendung von Faker
N = int(1e4)
data = {
    "Name": [fake.name() for _ in range(N)],
    "Address": [fake.address() for _ in range(N)],
    "Email": [fake.email() for _ in range(N)],
    "Phonenumber": [fake.phone_number() for _ in range(N)],
    "Date_of_birth": [
        fake.date_of_birth(minimum_age=18, maximum_age=90) for _ in range(N)
    ],
    "Company": [fake.company() for _ in range(N)],
    "Job": [fake.job() for _ in range(N)],
    "IBAN": [fake.iban() for _ in range(N)],
    "Creditcard": [fake.credit_card_number() for _ in range(N)],
    "Creation_date": [fake.date() for _ in range(N)],
}

dtypes = {
    "Name": pl.Utf8,
    "Address": pl.Utf8,
    "Email": pl.Utf8,
    "Phonenumber": pl.Utf8,
    "Date_of_birth": pl.Date,
    "Company": pl.Utf8,
    "Job": pl.Utf8,
    "IBAN": pl.Utf8,
    "Creditcard": pl.Int64,
    "Creation_date": pl.Date,
}

df = pl.DataFrame(data)
df.write_csv("mockme_up.csv", separator=";", quote_style="non_numeric")
print("=" * 50)
print(f"Succeful created mockup data of shape {df.shape=}")
print("=" * 50)

更新/解决方案

这现在被跟踪为 github 问题:https://github.com/pola-rs/polars/issues/19078

作为解决方法,将

n_threads=1
传递给
read_csv()
将解决该问题

python csv python-polars eol
1个回答
0
投票

要全面回顾 Python 中的 Polars 包,包括其语法、数据结构和 API,以及与 pandas 进行 Polars 速度比较,请查看此详细指南:

https://youtu.be/YLawfoFapIY

请订阅、点赞并评论视频

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