Ученые данных 80% времени, затрачиваемого на очистку задач?

Ученые данных 80% времени, затрачиваемого на очистку задач?

Правила чистки сводные данные по четырем основным пунктам: «полное единство»

  • Целостность: один данные, если имеется нулевое значение, статистическое поле является совершенным.
  • Всесторонний: Все значения, наблюдаемые для столбца, например, в листе Excel, мы выбираем один столбец можно видеть, что средний, максимальный, минимальный. Мы можем использовать здравый смысл, чтобы определить, является ли столбец в вопросе, такие как: определения данных, идентификация блока, само значение.
  • Законность: законность типа данных, содержания и размера. Например, наличие не-ASCII символов данных, наличие неизвестного пола, возраст более 150 лет и так далее.
  • Уникальность: является ли дублирующие записи данных, поскольку данные, как правило, агрегируются из различных источников, повторяющаяся ситуация обычна. Строки, столбцы, данные должны быть уникальными, такой человек не может быть повторена много раз записи, и вес человека не может повторяться много раз в показателях столбцов записи.

1 Integrity

Вопрос 1: пропущенное значение

Некоторые возрастные, весовые значения отсутствуют, то эти значения не собираются, как правило, тремя способами:

  • Удалить: Удалить отсутствующую запись данных
  • Средства: Используя среднее значение текущего столбца
  • Частота: Наиболее текущий столбец частоты данных происходит с использованием

Df хотят, чтобы заполнить пропущенные значения по среднему возрасту [ «Возраст»]:

df['Age'].fillna(df['Age'].mean(), inplace=True)

Был заполнено самыми высокие данные частоты, поле может получить частоту максимального age_maxf века через value_counts, а затем недостающее поле данных Возраста заполнено age_maxf:

age_maxf = train_features['Age'].value_counts().index[0]
train_features['Age'].fillna(age_maxf, inplace=True)

Вопрос 2: пустые строки

Dropna требуется после того, как данные считываются обработка (), удалить пустые строки

# 删除全空的行
df.dropna(how='all',inplace=True) 

2 комплексность

Проблема: Блок данных столбца не является равномерным

Кг с использованием в качестве единицы измерения будут преобразованы в LBS кг фунтов кг

# 获取 weight 数据列中单位为 lbs 的数据
rows_with_lbs = df['weight'].str.contains('lbs').fillna(False)
print df[rows_with_lbs]
# 将 lbs转换为 kgs, 2.2lbs=1kgs
for i,lbs_row in df[rows_with_lbs].iterrows():
  # 截取从头开始到倒数第三个字符之前,即去掉lbs。
  weight = int(float(lbs_row['weight'][:-3])/2.2)
  df.at[i,'weight'] = '{}kgs'.format(weight) 

3 рациональность

Проблема: не-ASCII символы

Удалять или альтернативные пути решения проблемы не-ASCII

# 删除非 ASCII 字符
df['first_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)
df['last_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)

4 уникальность

Вопрос 1: Есть целый ряд параметров

Имя столбца два параметра (имя) FirstName & LastName, Имя столбца Имя и Фамилия разделилась на два поля, используют метод разделения, str.split (развернуть = True), список разбит на новые столбцы, оригинал Имя столбца удален

# 切分名字,删除源数据列
df[['first_name','last_name']] = df['name'].str.split(expand=True)
df.drop('name', axis=1, inplace=True)

Вопрос 2: дублирующие данные

Есть повторяющиеся записи об использовании drop_duplicates () для удаления дубликатов данных

# 删除重复数据行
df.drop_duplicates(['first_name','last_name'],inplace=True)

Упражнения:

Очистка лакомства:

питание унции животное
бекон 4,0 свинья
вытащил из свинины 3.0 свинья
бекон NaN свинья
пастрами 6,0 корова
Солонина 7,5 корова
Бекон 8,0 свинья
пастрами -3,0 корова
мед ветчины 5.0 свинья
нова кислородно 6,0 лосось
import pandas as pd
"""利用Pandas清洗美食数据"""

# 读取csv文件
df = pd.read_csv("c.csv")

df['food'] = df['food'].str.lower() # 统一为小写字母
df.dropna(inplace=True) # 删除数据缺失的记录
df['ounces'] = df['ounces'].apply(lambda a: abs(a)) # 负值不合法,取绝对值

# 查找food重复的记录,分组求其平均值
d_rows = df[df['food'].duplicated(keep=False)]
g_items = d_rows.groupby('food').mean()
g_items['food'] = g_items.index
print(g_items)

# 遍历将重复food的平均值赋值给df
for i, row in g_items.iterrows():
    df.loc[df.food == row.food, 'ounces'] = row.ounces
df.drop_duplicates(inplace=True) # 删除重复记录

df.index = range(len(df)) # 重设索引值
print(df)

или

jupyter notebook,python3

import pandas as pd
df = pd.read_csv(r"D://Data_for_sci/food.csv")
df.index

df

# Data cleaning for lowercase
df['food'] = df['food'].str.lower()
df

# Delet NaN
df = df.dropna()
df.index = range(len(df)) # reset index
df

# Get bacon's mean value and delet second one
df.loc[0,'ounces'] = df[df['food'].isin(['bacon'])].mean()['ounces']
df.drop(df.index[4],inplace=True)
df.index = range(len(df)) # reset index
df

#Get pastrami's mean value and delet second one
df.loc[2,'ounces'] = df[df['food'].isin(['pastrami'])].mean()['ounces']
df.drop(df.index[4],inplace=True)
df.index = range(len(df)) # reset index
df
Опубликовано 75 оригинальных статей · вона похвала 9 · просмотров 9169

рекомендация

отblog.csdn.net/ywangjiyl/article/details/104770358