Numpy превращая целые числа в десятичные - PullRequest
0 голосов
/ 16 октября 2018

Рассмотрим следующий код

import numpy as np
import pandas as pd
myDict = ({"Row 1": [10, np.nan],
           "Row 2": [10, "NaN"]})
myDf = pd.DataFrame(myDict)

Это приводит к следующему кадру данных

enter image description here

Почему используется np.Нан превратить Int в десятичное в первом столбце?

Ответы [ 4 ]

0 голосов
/ 16 октября 2018

Я предполагаю, что поскольку вы использовали цитаты во втором столбце, он рассматривал NaN как строку.Таким образом, он назначил тип данных столбца 2 как «объект» вместо целого числа или числа с плавающей точкой.Кроме того, np.nan обрабатывается как число с плавающей точкой, поэтому столбцу 1, который содержит как целые числа, так и числа с плавающей точкой, был назначен более подробный тип с плавающей точкой.

Используя приведенный выше код, я запустил следующий код:

In[1]:
type(np.nan)
Out[1]:
float

In[2]:
type("NaN")
Out[2]:
str


In[3]:
myDf.info()

Out[3]:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 2 columns):
Row 1    1 non-null float64
Row 2    2 non-null object
dtypes: float64(1), object(1)
memory usage: 112.0+ bytes 
0 голосов
/ 16 октября 2018

Панды во многом зависят от Numpy.Среди этих вещей нулевое значение np.nan.Numpy определяет это значение как dtype np.float.Pandas намеревается хранить столбцы данных в виде одномерных массивов Numpy.Numpy требует, чтобы все значения были приведены к одинаковым значениям dtype.

. Это будет исправлено, если Numpy имеет нулевое значение для целых чисел, но это не ... пока.

Когда Пандычитает словарь и понимает, что все значения являются числовыми, у него есть два варианта.

  1. Привести весь столбец как dtype object и сохранить значения [10, np.nan]
  2. Приведениевесь столбец как dtype float и увеличивает целое число [10.0, np.nan]

Панд выбирает второй вариант, потому что почти всегда люди будут делать численные расчеты, и наличие float оптимизировано для такихвещей, в то время как object нет.

В другом столбце, [10, "Nan"] содержит строковые объекты, и Панды не пытаются преобразовать их в float и оставляют их как object.Вам решать, как это исправить.

0 голосов
/ 16 октября 2018

Попробуйте

import numpy as np
import pandas as pd
myDict = ({"Row 1": [10, np.nan],
       "Row 2": [10, "NaN"]})
myDf = pd.to_numeric(myDict, errors="coerce")
0 голосов
/ 16 октября 2018
myDict = ({"Row 1": [10.0, np.nan],
       "Row 2": [10.0, "NaN"]})

Это должно сработать.Если это не так, вы можете изменить значение pandas dataframe

myDf.apply(pd.to_numeric(errors="coerce"))

Coerce позволяет игнорировать значения nan.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...