Pandas Как заменить? с NaN - обработка нестандартных отсутствующих значений
Я новичок в pandas, я пытаюсь загрузить csv в Dataframe. У моих данных отсутствуют значения, представленные как?, и я пытаюсь заменить его стандартными пропущенными значениями - NaN
Пожалуйста, помогите мне с этим. Я пробовал читать через pandas docs, но я не могу следовать.
def readData(filename):
DataLabels =["age", "workclass", "fnlwgt", "education", "education-num", "marital-status",
"occupation", "relationship", "race", "sex", "capital-gain",
"capital-loss", "hours-per-week", "native-country", "class"]
# ==== trying to replace ? with Nan using na_values
rawfile = pd.read_csv(filename, header=None, names=DataLabels, na_values=["?"])
age = rawfile["age"]
print age
print rawfile[25:40]
#========trying to replace ?
rawfile.replace("?", "NaN")
print rawfile[25:40]
![The Snap shot of the data]()
Ответы
Ответ 1
Вы можете заменить это только для этого столбца, используя replace
:
df['workclass'].replace('?', np.NaN)
или для всего df:
df.replace('?', np.NaN)
UPDATE
OK Я понял вашу проблему, по умолчанию, если вы не передаете разделительный символ, тогда read_csv
будет использовать запятую ','
в качестве разделителя.
Ваши данные и, в частности, один пример, где у вас есть проблемная строка:
54, ?, 180211, Some-college, 10, Married-civ-spouse, ?, Husband, Asian-Pac-Islander, Male, 0, 0, 60, South, >50K
на самом деле является запятой и пространством в качестве разделителя, поэтому, когда вы проходили na_value=['?']
, это не соответствовало, потому что все ваши значения имеют перед собой пробельный символ, который вы не можете наблюдать.
если вы измените свою строку следующим образом:
rawfile = pd.read_csv(filename, header=None, names=DataLabels, sep=',\s', na_values=["?"])
то вы должны обнаружить, что все это работает:
27 54 NaN 180211 Some-college 10
Ответ 2
Использовать numpy.nan
Numpy - Заменить номер с помощью NaN
import numpy as np
df.applymap(lambda x: np.nan if x == '?' else x)
Ответ 3
В порядке я получил его:
#========trying to replace ?
newraw= rawfile.replace('[?]', np.nan, regex=True)
print newraw[25:40]
Ответ 4
несколько раз будут пробелы с? в файле, созданном такими системами, как Informatica или HANA
Сначала вам нужно убрать пробелы в DataFrame
temp_df_trimmed = temp_df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
А позже примените функцию для замены данных
temp_df_trimmed['RC'] = temp_df_trimmed['RC'].map(lambda x: np.nan if x=="?" else x)