pd.to_csv сохраняет, но, по-видимому, неверные данные (согласно функции печати) - PullRequest
0 голосов
/ 21 ноября 2018

это мой первый пост на stackoverflow.Пожалуйста, будьте осторожны со мной, если я не буду правильно следовать общему стилевому руководству.

Я выполняю вызов kaggle "предсказать house_prices".Мой первый шаг - предварительная обработка набора данных.В коде "NaN" есть пустые ячейки.С помощью df ["Заголовок"]. FillNA ("NA") я изменяю его на "NA", который в этом вызове определяется как не описанный далее.

Функция печати показывает, что подход работает.В конце я хочу сохранить мой измененный DataFrame в файл .csv (вы можете увидеть путь и имя файла в коде).Однако, хотя CSV-файл действительно сохраняет данные, очевидно, что они неверны.Итак, я предполагаю, что, должно быть, я допустил ошибку с синтаксисом pd.to_csv.

Во-первых, вот мой код.После этого вы узнаете, что консоль говорит об измененном фрейме данных "maindf" и фрейме данных моего файла .csv "csvdf".Кстати, извините за плохое форматирование с помощью консоли.

import os
import pandas as pd
import numpy as np

#Variables
PRICE = []
CRIT = []

#Directories
DATADIR = r"C:\Users\Hp\Desktop\Project_Arcus\house_price\data"
DATA = "train.csv"
path = os.path.join(DATADIR, DATA)
MODFILE = "train_modified.csv"
mod_path = os.path.join(DATADIR, MODFILE)

print(f"Training Data is {path}")
print(f"Modified Training Data is{mod_path}")

# Goal: Open the document of the chosen path. Extract data (f. e. the headline)
df = pd.read_csv(path)
maindf = df # this step is unnecessary, but it helped me to better understand.

# Goal: Check for empty cells. Replace them with a fitting value, so the neural network can 
# threat them accordingly. Save the .csv under a new name.
maindf["PoolQC"] = df["PoolQC"].fillna("NA")
maindf["MiscFeature"] = df["MiscFeature"].fillna("NA")
maindf["Alley"] = df["Alley"].fillna("NA")
maindf["Fence"] = df["Fence"].fillna("NA")
maindf["FireplaceQu"] = df["FireplaceQu"].fillna("NA")
maindf.to_csv(mod_path,index=True) # index=False means there will be no row names (index).

# Next Goal: Save the dataframe df into a csv document "train_modified.csv"  WORKS
# Check if the new file is correct.                                     Not correct! NaN included...!

#print(df.isnull().sum())
csvdf = pd.read_csv(mod_path)
#print(csvdf.isnull().sum())
print(maindf["PoolQC"].head(10))
print(csvdf["PoolQC"].head(10))

Данные обучения - C: \ Users \ Hp \ Desktop \ Project_Arcus \ house_price \ data \ train.csv Измененные данные обучения - C: \ Users \ Hp \ Desktop \ Project_Arcus \ house_price \ data \ train_modified.csv 0 NA 1 NA 2 NA 3 NA 4 NA 5 NA 6 NA 7 NA 8
NA 9 NA Имя: PoolQC, dtype: объект 0
NaN 1 NaN 2 NaN 3
NaN 4 NaN 5 NaN 6 NaN 7 NaN 8 NaN 9 NaN Имя: PoolQC, dtype: object

1 Ответ

0 голосов
/ 21 ноября 2018

Проблема не в to_csv, а в read_csv, документации , для которой говорится:

na_values ​​: скаляр,str, list-like или dict, по умолчанию Нет

По умолчанию следующие значения интерпретируются как NaN: '', '# N / A', '# N / AN / A', '#NA', '-1. # IND', '-1. # QNAN', '-NaN', '-nan', '1. # IND', '1. # QNAN', 'N / A', 'NA' , 'NULL', 'NaN', 'n / a', 'nan', 'null'.

Вместо этого определите аргументы keep_default_na и na_values, когдаВы используете read_csv:

csvdf = pd.read_csv(mod_path, keep_default_na=False, na_values='')

Вы можете указать список значений для na_values: при использовании с keep_default_na=False, Pandas будет рассматривать только эти значения как NaN.

Лучшей идеей является использование менее неоднозначной строки, чем 'NA', для представления данных, которые вы не хотите читать как NaN.

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