Преобразование из числа с плавающей точкой (нативное число с плавающей точкой или numpy .float64) в целое число не работает - PullRequest
0 голосов
/ 24 марта 2020

У меня есть датафрейм, который загружен с плавающей точкой и NaN. Мне нужно преобразовать все десятичные числа / числа с плавающей запятой в целые числа. Я проверил, что все типы numpy .float64, но мое преобразование в целое число не работает. Вот как выглядит фрейм данных.

enter image description here

В настоящее время я использую этот код, чтобы попытаться изменить все не NaN на целые числа, но это не так замена числа с плавающей точкой на целые числа в кадре данных.

for i, row in df_cn.iterrows():
    for col in df_cn.columns:
        cell = row[col]
        if isinstance(cell, np.float64) and np.isnan(cell) == False:
            cell = int(cell)
            df_cn.loc[i,col] = cell

Это для l oop не заменяет числа с целыми числами, а также я получаю эту ошибку, хотя я использовал df_cn.loc []:

enter image description here

Я не уверен, что делаю неправильно, я выполнил похожий процесс преобразования строк в datetime с похожими логами c, и это сработало нормально. Возможно, я упускаю что-то очень очевидное. Я был бы очень признателен за помощь.

Ответы [ 3 ]

0 голосов
/ 24 марта 2020

Если в вашем фрейме данных есть только цифры, вы можете попробовать:

df_c = df.applymap(np.int64)

Но если ваш фрейм данных может содержать нечисловые значения c, это приведет к ошибке.

Если вы все еще предпочитаете использовать свой собственный код, попробуйте это:

for i, row in df_cn.iterrows():
for col in df_cn.columns:
    cell = row[col]
    if isinstance(cell, np.float) and not np.isnan(cell):
        cell = int(cell)
        df_cn.loc[i,col] = cell
0 голосов
/ 24 марта 2020

Pandas, по умолчанию, создает серии чисел как тип с плавающей запятой, если есть значения np.nan: документация

Поскольку NaN - это число с плавающей запятой, столбец целых чисел с хотя бы одним пропущенным значением приведен к типу d с плавающей точкой (подробнее см. в разделе Поддержка целых чисел NA). Pandas предоставляет массив целых чисел, который может быть пустым, который может быть использован путем явного запроса dtype

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

  1. Int8Dtype
  2. Int16Dtype
  3. Int32Dtype
  4. Int64Dtype
0 голосов
/ 24 марта 2020

Это должно изменить ваш тип данных с плавающего на int

for col in df_cn.columns:
    df_cn[col]=df_cn[col].astype(int)

Вам нужно заменить nan на int (например, 0), прежде чем это сделать df.fillna(0, inplace=True)

Вот примерный кадр данных

df=pd.DataFrame({ "D": [1.0, np.nan, 2.0, np.nan, 3.0, np.nan, np.nan, np.nan, 7],"E": [np.nan, 4.0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]})

df.fillna(0, inplace=True)
for col in df.columns:
    df[col] = df[col].astype(int)

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