2015-10-30 3 views
2

У меня есть DataFrame, который выглядит следующим образом:панды: преобразование типа возвращения некорректное значение

Values Total 
Values  
cbase 2019 

Вот лучше посмотрите на значение:

>>> df.values 
[[ 2019.]] 

>>> df.dtypes 
Values 
Total  float64 
dtype: object 

Теперь я хотел бы, чтобы убедиться, что значения является целым числом (без десятичного знака), так что я:

df.astype(int64) 

Values Total 
Values  
cbase 2018 

значение изменилось с 2019 до 2018. Мне любопытно; что происходит?

+1

Пожалуйста отправьте данные и воспроизводимый код, также то, что делает 'df.values ​​[0]' show? – EdChum

+0

Невозможно опубликовать данные, это безумно массивно. он показывает df.values ​​[0] [2019.] –

+2

опубликуйте достаточно данных и кода, которые воспроизводят эту ошибку, в противном случае это станет угадающей игрой. – EdChum

ответ

4

Я думаю, что это предмет округления для представления; ваше значение в объекте панды на самом деле очень немного под 2019. Например:

>>> v = np.nextafter(2019, 0) 
>>> v 
2018.9999999999998 

Если поместить это значение v в DataFrame; она округляет в 2019 году для представления:

>>> df = pd.DataFrame([v]) 
>>> df 
     0 
0 2019 

Однако, отбрасывая df в целое только падает дробную часть числа, так что вы получите в 2018 году:

>>> df.astype(int) 
     0 
0 2018 
+0

Это похоже на причину. Таким образом, решение было бы округлить значение? чтобы получить 2019 –

+0

Да, вы могли бы округлить вместо этого, чтобы добраться до ближайшего целого числа (а затем бросить на float) - это зависит от того, что представляют ваши данные и имеет ли какое-либо значение, что это значение на самом деле немного меньше, чем 2019. –

+0

(I означало *, а затем бросали в int *) –

Смежные вопросы