Анализ числовых данных с разделителем тысяч в PolarsPython

Программы на Python
Anonymous
 Анализ числовых данных с разделителем тысяч в Polars

Сообщение Anonymous »

У меня есть файл tsv, содержащий целые числа с разделителями тысяч. Я пытаюсь прочитать его с помощью Polars==1.6.0, кодировка utf-16

Код: Выделить всё

from io import BytesIO
import polars as pl

data = BytesIO(
"""
Id\tA\tB
1\t537\t2,288
2\t325\t1,047
3\t98\t194
""".encode("utf-16")
)

df = pl.read_csv(data, encoding="utf-16", separator="\t")
print(df)
Я не могу понять, как заставить поляры обрабатывать столбец «B» как целое число, а не как строку, и я также не могу найти чистый способ приведения его к целому числу.

Код: Выделить всё

shape: (3, 3)
┌────────┬─────┬───────┐
│ Id     ┆ A   ┆ B     │
│ ---    ┆ --- ┆ ---   │
│ i64    ┆ i64 ┆ str   │
╞════════╪═════╪═══════╡
│ 1      ┆ 537 ┆ 2,288 │
│ 2      ┆ 325 ┆ 1,047 │
│ 3      ┆ 98  ┆ 194   │
└────────┴─────┴───────┘
Приведение не удается, как и явная передача схемы. Я также попробовал использовать str.strip_chars, и чтобы удалить запятую, вместо этого я использую str.replace_all.

Код: Выделить всё

df = df.with_columns(
pl.col("B").str.strip_chars(",").alias("B_strip_chars"),
pl.col("B").str.replace_all("[^0-9]", "").alias("B_replace"),
)
print(df)

Код: Выделить всё

shape: (3, 5)
┌────────┬─────┬───────┬───────────────┬───────────┐
│ Id     ┆ A   ┆ B     ┆ B_strip_chars ┆ B_replace │
│ ---    ┆ --- ┆ ---   ┆ ---           ┆ ---       │
│ i64    ┆ i64 ┆ str   ┆ str           ┆ str       │
╞════════╪═════╪═══════╪═══════════════╪═══════════╡
│ 1      ┆ 537 ┆ 2,288 ┆ 2,288         ┆ 2288      │
│ 2      ┆ 325 ┆ 1,047 ┆ 1,047         ┆ 1047      │
│ 3      ┆ 98  ┆ 194   ┆ 194           ┆ 194       │
└────────┴─────┴───────┴───────────────┴───────────┘
Кроме того, чтобы это работало в целом, мне нужно убедиться, что read_csv не пытается вывести типы для каких-либо столбцов, поэтому я могу преобразовать их все вручную (любой числовой столбец со значением> 999 будет содержать запятую)


Подробнее здесь: https://stackoverflow.com/questions/789 ... -in-polars

Вернуться в «Python»