Pandas и CSV

CSV (comma-separated values) — самый распространённый формат для логов датчиков и таблиц. Pandas умеет читать и писать CSV одной функцией: pd.read_csv / df.to_csv. У них десятки параметров, но в 90% случаев достаточно 4–5 ключевых.

Когда использовать

  • Загрузка лога с Arduino, сохранённого через Serial.print(",").

  • Экспорт результата анализа для отчёта/Excel.

  • Промежуточное хранение между шагами пайплайна.

Пример 1. Минимальное чтение

log.csv:

time,temp,hum
0,22.1,55
1,22.3,54
import pandas as pd

df = pd.read_csv("log.csv")
print(df)

Output:

   time  temp  hum
0     0  22.1   55
1     1  22.3   54

Пример 2. Разделитель и кодировка

CSV из Excel в русской локали часто использует ;:

import pandas as pd

df = pd.read_csv("data.csv", sep=";", encoding="utf-8")

Если файл из старого Windows-софта, может потребоваться encoding="cp1251".

Пример 3. Парсинг дат

import pandas as pd

df = pd.read_csv("events.csv", parse_dates=["timestamp"])
print(df.dtypes)

Output:

timestamp    datetime64[ns]
event                object
dtype: object

Без parse_dates столбец остался бы строковым.

Пример 4. Свои названия столбцов

Если в CSV нет заголовка:

import pandas as pd

df = pd.read_csv("raw.csv", header=None, names=["t", "x", "y"])
print(df.head(2))

Пример 5. Запись CSV

import pandas as pd

df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
df.to_csv("out.csv", index=False)

Содержимое out.csv:

a,b
1,4
2,5
3,6

Без index=False в файл попадёт «лишний» первый столбец с индексами.

Пример 6. Чтение по частям

Для больших файлов:

import pandas as pd

total = 0
for chunk in pd.read_csv("big.csv", chunksize=100_000):
    total += chunk["value"].sum()
print("Сумма:", total)

chunksize возвращает итератор по кускам DataFrame — память не переполняется.

Пример 7. Только нужные столбцы

import pandas as pd

df = pd.read_csv("log.csv", usecols=["time", "temp"])
print(df.head())

Полезно, если в файле сотни столбцов, а нужно 2.

Подводные камни

  • Запятая в десятичных числах ломает чтение — используйте decimal=",".

  • По умолчанию read_csv пытается угадать типы; для критичных колонок задавайте dtype={"id": str}.

  • Файл может начинаться с BOM — Pandas обычно справляется, но иногда нужен encoding="utf-8-sig".

См. также

Примечание

Лицензия и источники

Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.