数据分析-03 数据处理

总结一下数据处理的常用操作

理论

1、缺失值处理

# 去除缺失值
data.dropna()          #等价于 data[data.notnull()]
data.dropna(axis=1, how='all')    #只丢弃全部为缺失值的行
# 填补缺失值
df.fillna({1: 0.5, 2: 0},inplace=True)
df.fillna(method='ffill', limit=2)      #前向填充
data.fillna(data.mean())   #均值填充

2、重复值处理

# 去除重复值
data.drop_duplicates()
data.drop_duplicates(['k1', 'k2'], keep='last')      #keep默认保留第一个

3、替换

data.replace(-999, np.nan)
data.replace([-999, -1000], [np.nan, 0])      #每个值可以有不同的替换值
data.replace({-999: np.nan, -1000: 0})        #也可以用字典形式替换

4、利用函数或映射进行数据转换

# 利用字典转换(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]}) 
meat_to_animal = { 'bacon': 'pig', 'pulled pork': 'pig', 'pastrami': 'cow', 'corned beef': 'cow', 'honey ham': 'pig', 'nova lox': 'salmon' } 
lowercased = data['food'].str.lower()       #大小写一致
data['animal'] = lowercased.map(meat_to_animal)
# 上两条等价于
data['food'].map(lambda x: meat_to_animal[x.lower()])       

5、连续数据离散化

ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
bins = [18, 25, 35, 60, 100]
pd.cut(ages, bins)
# 上两条等价于
pd.cut(ages, [18, 26, 36, 61, 100], right=False)
# 给元面命名
group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior']
pd.cut(ages, bins, labels=group_names)
# 等份划分
pd.qcut(ages, 4)

6、数据合并

# merge合并 → 类似excel的vlookup
pd.merge(df3, df4,on=['key1','key2'], how = 'inner')     # 多个链接键
pd.merge(df3, df4, left_on='lkey', right_on='rkey')       #两个对象的列名不同
# concat 连接
pd.concat([s1, s2, s3], axis=1)        #默认情况下,concat是在axis=0上工作的,即列不变,仅增加数据行数
pd.concat([s1, s4], axis=1, join_axes=[['a', 'c', 'b', 'e']])  # 指定拼接的列

7、数据的分组聚合

# groupby
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],
                   'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
                   'C' : np.random.randn(8),
                   'D' : np.random.randn(8)})
a = df.groupby('A').mean()
#按key1进行分组,并计算data1列的平均值
grouped = df['data1'].groupby(df['key1'])
grouped.mean()
means = df['data1'].groupby([df['key1'], df['key2']]).mean()
means.unstack()
# 透视表
data.pivot_table(values='tip_pct', index=['time', 'size', 'smoker'], columns='day', aggfunc='mean', fill_value=0)

应用

1、数据读取

df = pd.read_csv('/home/kesci/商铺数据.csv')
print(type(df),df['name'].dtype) # 查看df类型,查看df中一列的数值类型
df.head()

2、数据提取

# 列索引 
df1['quality']       #df[...] - 单列索引,结果series
df1[['quality','environment','service']]        #df[...] - 多列索引,结果dataframe

# 行索引 - loc
# 按照index选择行,只选择一行输出Series,选择多行输出Dataframe
import numpy as np
df = pd.DataFrame(np.random.rand(12).reshape(3,4)*100,
                   index = ['one','two','three'],
                   columns = ['a','b','c','d'])
data1 = df.loc['one']
data2 = df.loc[['one','two']]

# 行索引 - iloc
# 按照整数位置(从轴的0到length-1)选择行
data3 = df.iloc[0]
data4 = df.iloc[[0,2]]

# 行索引 - 布尔型索引
df1[df1['comment'] >50]
df1[df1['comment'] >50][['quality','environment','service']]

3、数据清洗

# 提取有用数据并更改数据类型
df1 = df[df['comment'].str.contains('条')]
df1['comment'] = df1['comment'].str.split('条').str[0].astype('int')

# 分列
df1['quality'] = df1['commentlist'].str.split('                                ').str[0].str[2:].astype('float')
df1['environment'] = df1['commentlist'].str.split('                                ').str[1].str[2:].astype('float')
df1['service'] = df1['commentlist'].str.split('                                ').str[2].str[2:].astype('float')
del df1['commentlist']
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容