pandas.read_csv преобразует десятичные столбцы с плавающей точкой в ​​ноль - PullRequest
0 голосов
/ 28 июня 2018

Я храню Pandas DataFrame в файле .csv, в котором есть столбец с целочисленными данными, но система баз данных обрабатывает как float по устаревшим причинам, поэтому .csv также должен хранить его как float. Сохраняя его с df.to_csv, он сохраняет запятую нулями десятичную часть, поэтому столбец в файле .csv имеет вид:

IntNumber
3.0
45.0
123.0
...

Но когда я загружаю это с pandas.from_csv, оно выводит тип как int64, несмотря на конечный ноль. Я просмотрел документы pandas.read_csv и похоже, что я могу вручную указать тип данных, равный float64, но я думаю, что есть несколько случаев, когда его нужно определить как float int64. Было бы полезно, чтобы он автоматически определял тип, который должен быть плавающим, при наличии конечного нуля, возможно ли это?

Фрагмент того, как я загружаю CSV, на данный момент он выводит тип столбца в dataframe, чтобы он был int64

dataframe = pandas.read_csv("<csv_name>", index_col=0, parse_dates=True)

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Я не могу воспроизвести вашу проблему в моей версии Pandas (0.23.1), но при чтении файла CSV можно явно указывать типы, используя параметр dtype.

Как это:

import pandas as pd
import numpy as np
from io import StringIO


def read_data():
    return StringIO("""IntNumber\n3.0\n45.0\n\n123.0""")

df = pd.read_csv(read_data(), dtype={'IntNumber': np.float32})
print(df.dtypes)

# Output:
# IntNumber    float32
# dtype: object

df = pd.read_csv(read_data(), dtype={'IntNumber': np.int32})
print(df.dtypes)

# Output:
# IntNumber    int32
# dtype: object
0 голосов
/ 28 июня 2018

Я не могу воспроизвести вашу проблему, см. Пример ниже.

from io import StringIO
import pandas as pd

mystr = StringIO("""IntNumber
3.0
45.0
123.0""")

df = pd.read_csv(mystr)

#pandas 0.19.2, python 3.6.0
print(df.dtypes)

IntNumber    float64
dtype: object

#pandas 0.23.1, python 3.6.4
print(df.dtypes)

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