Я столкнулся с этой проблемой, работая с pyspark. Поскольку это интерфейс python для кода, запущенного на jvm, для него требуется безопасность типа, а использование float вместо int не является вариантом. Я работал над проблемой, обернув pandas pd.read_csv
в функции, которая заполняет определенные пользователем столбцы заданными пользователем значениями заполнения, прежде чем придать их требуемому типу. Вот что я в итоге использовал:
def custom_read_csv(file_path, custom_dtype = None, fill_values = None, **kwargs):
if custom_dtype is None:
return pd.read_csv(file_path, **kwargs)
else:
assert 'dtype' not in kwargs.keys()
df = pd.read_csv(file_path, dtype = {}, **kwargs)
for col, typ in custom_dtype.items():
if fill_values is None or col not in fill_values.keys():
fill_val = -1
else:
fill_val = fill_values[col]
df[col] = df[col].fillna(fill_val).astype(typ)
return df