AI для початківцівПосібник
Запитайте LLM про CSV: надсилайте схему, а не таблицю
Надішліть назви стовпців, типи та 3 приклади рядків, отримайте один рядок pandas, виконайте його на повному файлі. Дешевше, ніж вставляти рядки, і ви можете перевірити число.

На цій сторінці
У вас є sales.csv з 5 000 рядків і одне питання: який продукт продавався найбільше в жовтні? Не вставляйте файл у чат. Надішліть моделі назви стовпців, їхні типи та три приклади рядків, попросіть один рядок pandas і виконайте цей рядок на повному файлі самостійно. Модель ніколи не читає ваші 5 000 рядків, запит залишається крихітним, а число, яке ви отримуєте, походить із коду, який ви можете запустити повторно.
Ось чому це працює краще, як виглядає запит, скрипт, який можна скопіювати, і скільки це коштує порівняно зі способом «вставити все».
Чому вставляння всієї таблиці йде не так#
Ось історія, яку ви можете впізнати. Хтось вставляє 200 рядків витрат у чат і просить підсумок. Відповідь приходить упевнена, з копійками й усім іншим. Вона також неправильна, і ніщо на екрані вам про це не каже.
Модель передбачає текст частина за частиною (ці частини — токени). Сума 200 чисел — це 200 маленьких кроків без калькулятора всередині, і одна зсунута цифра виглядає точно як правильна відповідь. Код поводиться інакше: df['amount']. додає всі рядки, щоразу, і дає той самий результат при повторному запуску.
Є друга проблема, і вона стосується розміру. Таблиця швидко з'їдає контекстне вікно, і ви платите за кожен рядок у кожному питанні. Десять питань про той самий файл означають десять копій усієї таблиці, надісланих як вхідні дані.
Швидка перевірка
Чому рядок pandas безпечніший, ніж просити модель порахувати суму?
Показати відповідь
Відповідь: Ваш комп'ютер виконує код на кожному рядку, і ви можете запустити його повторно та перевірити
Модель все ще може написати неправильний рядок. Різниця в тому, що рядок видимий і повторюваний: ви читаєте його, запускаєте і порівнюєте результат із кількома рядками вручну.
Надсилайте структуру таблиці, а не таблицю#
Моделі не потрібні ваші дані, щоб написати код. Їй потрібно знати, як виглядає таблиця: які стовпці існують, які значення вони містять і як записано рядок. Це схема плюс кілька рядків.
Припустімо, ваш sales.csv має чотири стовпці. Ось увесь запит:
A pandas DataFrame named df has these columns and types:
date object
product object
units int64
price float64
First 3 rows (CSV):
date,product,units,price
2026-10-01,Oat latte mix,12,4.50
2026-10-01,Cocoa,7,3.20
2026-10-02,Oat latte mix,9,4.50
Question: Which product sold the most units in October 2026?
Reply with ONE line of pandas code that computes the answer from df.
No explanation, no markdown, no imports.Очікуйте відповідь у формі df[df['date'].. Точне формулювання відрізняється від запуску до запуску, тому прочитайте рядок перед тим, як його виконувати.
Чому три рядки, а не лише назви стовпців? Через дату. Стовпець типу каже object, що означає лише текст. Приклади рядків показують, що дата записана як 2026-10-01, тож модель знає, що треба зіставляти з текстом 2026-10, а не з 10/2026 чи назвою місяця. Більшість неправильних рядків pandas походять із вгадування формату, якого таблиця ніколи не мала.

Скрипт: запитати, прочитати рядок, виконати його#
Скрипт нижче будує цей запит із вашого файлу, тож вам не потрібно вводити схему вручну. Він викликає API CheapTokens через OpenAI Python SDK: базова URL-адреса https:/, ідентифікатор моделі deepseek-. Тримайте ключ у змінній середовища, а не у файлі.
import os
import pandas as pd
from openai import OpenAI
client = OpenAI(
base_url="https://api.cheaptokens.dev/v1",
api_key=os.environ["CHEAPTOKENS_API_KEY"],
)
df = pd.read_csv("sales.csv") # for .xlsx: pd.read_excel("sales.xlsx")
schema = df.dtypes.to_string()
sample = df.head(3).to_csv(index=False)
question = "Which product sold the most units in October 2026?"
prompt = f"""A pandas DataFrame named df has these columns and types:
{schema}
First 3 rows (CSV):
{sample}
Question: {question}
Reply with ONE line of pandas code that computes the answer from df.
No explanation, no markdown, no imports."""
resp = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash-0731",
messages=[{"role": "user", "content": prompt}],
max_tokens=500,
)
text = resp.choices[0].message.content.strip()
code = text.removeprefix("```python").removeprefix("```").removesuffix("```").strip()
print("Model's line:", code)
print("Tokens in/out:", resp.usage.prompt_tokens, resp.usage.completion_tokens)
if resp.choices[0].finish_reason != "stop" or "import" in code or "__" in code:
raise SystemExit("Not running this one. Read the line above and decide.")
print("Answer:", eval(code, {"df": df, "pd": pd}))Останній блок — це те, що початківці пропускають. eval виконує будь-який текст, який написала модель, на вашій машині, тому скрипт відхиляє рядки з import або __ та відповіді, які було обрізано (finish_reason інший, ніж stop; дивіться чому відповідь зупиняється посеред речення). І ви все одно спершу читаєте надрукований рядок. Якщо він торкається файлів, мережі чи чогось, про що ви не просили, не запускайте його.
Перший запуск друкує три речі: рядок моделі, кількість токенів для цього одного запиту та відповідь. Кількість токенів — це ваш вимірювач для наступного розділу.
Скільки це коштує: вставити все проти схеми + 3 рядки#
Щоб порівняти, нам потрібен розмір рядка. Скажімо, рядок як 2026- займає близько 20 токенів. Це припущення: воно залежить від токенізатора моделі та ваших стовпців, і підрахунок токенів перед надсиланням показує ваше реальне число. З 20 токенами на рядок 5 000 рядків — це 5 000 × 20 = 100 000 вхідних токенів. Запит зі схемою та трьома рядками — близько 300 токенів, включно з інструкціями. Відповідь коротка в обох випадках, скажімо 60 токенів, тож різниця повністю на боці вхідних даних, тому, що зростає разом із вашою таблицею (докладніше про це в вхідні проти вихідних токенів).
Обидва числа малі в доларах, і це чесно: дешева модель робить навіть марнотратний спосіб доступним. Розрив — це те, що зростає. Ставте 20 питань на день, і запит «вставити все» надсилається 20 разів. Подвойте таблицю, і її вартість подвоїться, тоді як запит зі схемою не зміниться. І є тверда стіна: з контекстним вікном на 380K токенів 380 000 ÷ 20 = 19 000 рядків — це максимум, який ви взагалі могли б вставити, перш ніж залишити хоч якесь місце для відповіді. Експорт на 50 000 рядків просто не вміщується. Запит зі схемою вміщується, який би не був розмір таблиці.
Підставте свою таблицю і подивіться денну вартість:
Калькулятор вартості
Ваша таблиця, вставлена повністю: 20 питань на день
Вхідні токени на запит: 100 000 · Вихідні токени на запит: 60 · Запитів на день: 20
| Модель | За день | За місяць |
|---|---|---|
| GLM-5.3-Flash$0.02$0.04 | $0.04 | $1.20 |
| DeepSeek-V4-Flash$0.015$0.10 | $0.0301 | $0.904 |
| MiniMax-M2.7$0.05$0.15 | $0.10 | $3.01 |
Змініть in на 300, щоб побачити спосіб зі схемою. DeepSeek-V4-Flash на CheapTokens має одну ціну в будь-яку годину, без націнки в піковий час, і один баланс покриває кожну модель, тож ви можете замінити ідентифікатор моделі на zai- (контекст 390K) без другого акаунта. Актуальні ціни на сторінці цін.
Перевірте число, перш ніж довіряти йому#
Цикл завжди той самий. Робіть це щоразу, і неправильна відповідь буде спіймана на четвертому кроці, а не в звіті.
Розставте по порядку
Упорядкуйте цикл
Перетягніть елементи або скористайтеся стрілками
- Опишіть таблицю: типи стовпців і 3 приклади рядків
- Попросіть один рядок pandas, нічого більше
- Прочитайте рядок, потім виконайте його на повному файлі
- Перевірте результат вручну на кількох рядках

Четвертий крок дешевий. Відфільтруйте файл до кількох рядків (df[df['product'] == 'Cocoa'].), додайте їх подумки або в електронній таблиці та порівняйте. Якщо рядок моделі неправильний, він зазвичай неправильний очевидним чином: вона порахувала рядки замість підсумовування units або вибрала не той місяць.
Більше таких звичок дивіться в чому AI вигадує і 4 звички в запитах, які це зменшують.
Якщо не працює#
KeyError: 'Date'. Модель написала назву стовпця з іншими великими літерами. Вставте справжній рядок заголовка в запит, що вже роблять три приклади рядків, і додайте «використовуй назви стовпців точно як показано».- У відповіді є речення перед кодом. Ваш
evalзавершується помилкоюSyntaxError. Повторіть «ОДИН рядок коду pandas, без пояснень» у кінці запиту, остання інструкція важить найбільше. - Відповідь — це таблиця, а не число. Скажіть, яку форму ви хочете: «поверни одне число» або «поверни Series, відсортований за спаданням».
- Дати виходять неправильні. Приклади рядків показують реальний формат. Якщо ваші дати мають вигляд
14/10/2026, модель має це бачити; додайтеpd.до запиту як бажаний спосіб читання дат.to_ datetime(df['date'], dayfirst=True) finish_reason— цеlength. Відповідь було обрізано черезmax_tokens. Один рядок вміщується в 500 токенів, тож перевірте запит: можливо, модель довго пояснює.
Повне налаштування для вашого першого запиту, від ключа до відповіді, є в документації CheapTokens.



