Python Почему мои измененные типы данных go возвращаются к своим прежним типам данных после того, как я сохранил их в .csv? - PullRequest
0 голосов
/ 19 апреля 2020

.info Начального фрейма данных

<class 'pandas.core.frame.DataFrame'>
Int64Index: 2851191 entries, 0 to 3168737
Data columns (total 6 columns):
READ_TIME             object
SVC_PT_ID             float64
CUSTOMER_ID           object
SIGNAL_NAME           object
SIGNAL_DESCRIPTION    object
VALUE                 float64
dtypes: float64(2), object(4)
memory usage: 152.3+ MB 

Затем я меняю типы данных "CUSTOMER_ID", "SIGNAL_NAME" и "SIGNAL_DESCRIPTION" на "category"

test = new_inkl_24.astype({"CUSTOMER_ID": "category", "SIGNAL_NAME":"category", "SIGNAL_DESCRIPTION":"category"})

Я проверяю, все ли сработало и размер файла уменьшился

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2851191 entries, 0 to 2851190
Data columns (total 7 columns):
Unnamed: 0            int64
READ_TIME             object
SVC_PT_ID             float64
CUSTOMER_ID           category
SIGNAL_NAME           category
SIGNAL_DESCRIPTION    category
VALUE                 float64
dtypes: category(3), float64(2), int64(1), object(1)
memory usage: 95.2+ MB

Все работало отлично. Итак, теперь я сохраняю свой фрейм данных в .csv-f ie

test.to_csv('test.csv')

И вот проблема: размер файла больше не уменьшается. CSV точно такой же, как и исходный, со старыми типами данных для столбцов. Также, когда я снова импортирую файл в свой блокнот Jupyter, типы данных переключаются обратно на исходные.

# Load data
df = pd.read_csv("test.csv")
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2851191 entries, 0 to 2851190
Data columns (total 8 columns):
Unnamed: 0            int64
Unnamed: 0.1          int64
READ_TIME             object
SVC_PT_ID             float64
CUSTOMER_ID           object
SIGNAL_NAME           object
SIGNAL_DESCRIPTION    object
VALUE                 float64
dtypes: float64(2), int64(2), object(4)
memory usage: 174.0+ MB

Что я делаю не так?

1 Ответ

0 голосов
/ 19 апреля 2020

CSV - текстовый формат, который не имеет типов данных; фактически это все строки, как вы получаете из csv module . Pandas имеет несколько типов данных и попытается выбрать подходящие для каждого столбца при загрузке CSV, но вы можете указать типы данных , чтобы направлять его. Вы также можете сохранить файл в формате, который поддерживает такие типы, как HDF или Pickle (что также означает, что кадры данных можно хранить с использованием shelve ).

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