Опции:
1 Считайте CSV по умолчанию, исправьте dtypes после
, т.е. не указывайте dtypes, они по умолчанию будут иметь строковое значение. Затем исправьте нестроковые столбцы после (у вас есть только 'Speed': float
в вашем примере).
import pandas as pd
df = pd.read_csv(..., dtype = {'ID': 'object', 'Place': 'object', 'Speed': float}, ...)
# Then fix up any dtype after the read:
df['misread_col'] = df['misread_col'].astype(...)
См. do c на dtype
ИЛИ:
2 Заранее программно выяснить, каким должен быть тип dtype для каждого столбца.
Укажите тип dtype для каждого столбца во время чтения: pd.read_csv(... dtype={...} ...)
, как значение 'name': dtype
. , Это потребует от вас заранее знать имена столбцов (или, возможно, использовать регулярные выражения для назначения dtypes на основе имени). И чтобы сделать это программно, вам, вероятно, придется сначала прочитать строку заголовка каждого файла CSV и сопоставить его с dtypes.
И если вы хотите программно прочитать строку заголовка каждого CSV файл и сопоставьте его с dtypes:
import glob
for f in glob.glob('*.csv'):
# First, read header row, to infer dtypes
df = pd.read_csv(f, header=[0])
#print(df.columns)
# Here you can process df.columns, add it into a dtype_dict, whatever
# Second, reread entire file
df = pd.read_csv(f, dtype=...)
Честно говоря, выполнение 1) может быть менее печальным, чем 2), это зависит. Просто прочитайте все, настройте спецификаторы dtypes, запустите его снова. Если вы отлаживаете это, просто прочитайте, скажем, nrow=100
.