四、Pandas小結(2)— 數據清洗 & 分箱操作

#數據清洗

# 一、處理缺失數據
import pandas as pd

log_data = pd.read_csv('log.csv')
log_data

log_data.isnull()

log_data['paused'].isnull()

# 取出volume不爲空的數據
log_data[log_data['volume'].notnull()]

log_data.set_index(['time', 'user'], inplace=True)
log_data.sort_index(inplace=True)
log_data

log_data.fillna(0)

log_data.dropna()

log_data.ffill()#按之前的數據填充

log_data.bfill() #按之後的數據填充

# 二、數據變形
# 1、處理重複數據
data = pd.DataFrame({'k1': ['one', 'two'] * 3 + ['two'],
                     'k2': [1, 1, 2, 3, 3, 4, 4]})
data


#判斷數據是否重複
data.duplicated()

#去除重複數據
data.drop_duplicates()

data['v1'] = range(7)
data

#去除指定列的重複數據
data.drop_duplicates(['k1'])

data.drop_duplicates(['k1', 'k2'], keep='last')

# 2、使用函數或map轉化數據
data = pd.DataFrame({'food': ['bacon', 'pulled pork', 'bacon', 'Pastrami', 'corned beef', 'Bacon', 'pastrami', 'honey ham', 'nova lox'],
                     'ounces': [4, 3, 12, 6, 7.5, 8, 3, 5, 6]})
data

# 添加一列,用於指定食物的來源
meat_to_animal = {
    'bacon': 'pig',
    'pulled pork': 'pig',
    'pastrami': 'cow',
    'corned beef': 'cow',
    'honey ham': 'pig',
    'nova lox': 'salmon'
}
data

#使用map()
lowercased = data['food'].str.lower()
data['food'].str.lower()
data['animal'] = lowercased.map(meat_to_animal)
data

#使用方法
data['animal2'] = data['food'].map(lambda x : meat_to_animal[x.lower()])
data

# 3、替換值
data = pd.Series([1., -999., 2., -999., -1000., 3.])
data

import numpy as np

#將-999,-1000都替換爲空值
data.replace([-999,-1000], np.nan)

data.replace({-999: np.nan, -1000:0})

# 4、離散化和分箱操作
#年齡數據
ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]

# 分箱的邊界
bins = [18, 25, 35, 60, 100]

cats = pd.cut(ages, bins)
print(type(cats))

# Categorical對象
cats

#獲取分箱編碼
cats.codes

#返回分箱便捷索引
cats.categories

#統計箱中元素的個數
pd.value_counts(cats)

#帶標籤的分箱
group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior']
cats = pd.cut(ages, bins, labels = group_names)
cats
cats.get_values()

# 5、 啞變量操作
df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'], 
                   'data1': range(6)})
df

pd.get_dummies(df['key'])

# 5.向量化字符串操作

data = {'Dave': '[email protected]', 'Steve': '[email protected]', 'Rob': '[email protected]', 'Wes': np.nan}
data = pd.Series(data)
data

#字符串列元素中是否包含子字符串
data.str.contains('gmail')

#字符串列切片操作
data.str[:5]

split_df = data.str.split('@', expand=True)
split_df

split_df = data.str.split('@')
split_df

split_df[0].str.cat(split_df[1], sep='@')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章