Укажите формат float при записи в csv
Поскольку ваша основная проблема является форматом вывода при экспорте данных, никаких манипуляций не требуется. Просто используйте:
df.to_csv('file.csv', float_format='%.0f')
Поскольку вы хотите, чтобы только определенные столбцы имели это форматирование, вы можете использовать to_string
:
def format_int(x):
return f'{x:.0f}' if x==x else ''
with open('file.csv', 'w') as fout:
fout.write(df.to_string(formatters={'ID': format_int}))
Сохранить числовые данные в числовом виде
Есть столбец с идентификаторами, который состоит только из цифр
Если ваш столбец содержит только цифры, не преобразуйте в строки! Ваше желание преобразовать в строки кажется XY проблемой . Числовые идентификаторы должны оставаться числовыми.
Float NaN
приглашает апскейтинг
Ваша проблема: NaN
значения не могут сосуществовать с целыми числами в числовых рядах. Так как NaN
является float
, Панды выгоняют силы. Это естественно, потому что альтернатива object
dtype неэффективна и не рекомендуется.
Если это возможно, вы можете использовать значение часового, например, -1
для обозначения нулей:
df['ID'] = pd.to_numeric(df['ID'], errors='coerce').fillna(-1).astype(int)
print(df)
ID xyz
0 12345 4.56
1 -1 45.60
2 54231 987.00