分享

【Python数据挖掘】第一篇

 highoo 2019-03-20
一、数据读取

1. pandas 数据读取:

1
2
import pandas as pd
df = pd.read_csv("G:\\...\\NBA.csv",encoding='gbk')

read_csv 的重要参数:

复制代码
filepath_or_buffer:  # 文件的路径,URL或任何具有read()方法的对象。
sep :     # 分隔符,默认为 , 
header:   # 列名 , 默认为 header=0  取第0行做为数据集的列名
names:    # 指定数据集的列名称,配合header=None 使用  
encoding: # 编码格式
na_values:["Nope , ..."]      # 数据集中的字符串"Nope"被识别为NaN , ...
keep_defalut_na:   # 如果指定了na_values,并且keep_default_na是False默认的NaN值被覆盖
na_filter:         # 默认True,对缺失值进行检测,False为不处理。
error_bad_lines:   # 默认True,如果False,跳过错误行数据
warn_bad_lines:    # 默认True,如果error_bad_lines为False,而warn_bad_lines为True,则会输出每个“坏行”的警告
复制代码

2、Missing data 处理

复制代码
DataFrame.dropna()       # 返回没有NaN值的数据集
DataFrame.fillna(X)      # 将X填充到数据集中的NaN值
DataFrame.replace([to_replace, value, ...])   # 将to_replace 替换为 value , 

# 例子:
df.replace(np.nan,'xx',regex=False)    # 将NaN值替换为xx , regex 若为True 将to_value 当作正则进行匹配!
复制代码
 二、DataFrame与Series

1、DataFrame 是一个表格型数据结构,既有行索引又有列索引,看作由Series组成的字典。

1
df = pd.read_csv("G:\\....\\NBA.csv",encoding='gbk')

重要方法:

 

复制代码
查看:
    head([n])           # 返回前n行
    tail([n])           # 返回最后n行
    df[' 列名 ']        # 返回某一列的数据 
    df.列名             # 返回某一列的数据 

添加 / 修改整列 :
    df[' 列名 '] = 'xxx '   # (添加/修改) 一列,内容为xxx

删除:
    del df[' 列名 ']    # 删除某一列
    df.pop('列名')      # 返回项目并从DataFrame中删除

列运算:
    df[col3] = df[col1] + df[col2]

判断:
    df[ ' 列名 ' ]  > 100     # 符合显示 True , 否则False
复制代码

 

重要属性:

1.index

1
2
df.index
# RangeIndex(start=0, stop=3922, step=1)    # 3922文件总行数 ,

2.columns    返回列名

1
2
df.columns
# Index(['序号', 'Player', 'height', 'weight', 'collage', 'born', 'birth_city','birth_state'],dtype='object')

3.shape

1
2
df.shape
# (3922, 8)   数据集一共3922行,8列

4.dtypes      返回每一列数据类型

1
2
3
4
5
6
7
8
9
10
df.dtypes
# 序号              int64
# Player           object
# height           float64
# weight           float64
# collage          object
# born             float64
# birth_city       object
# birth_state      object
# dtype: object

行选取 

1.切片

1
df[:5]  或  df [10]

2.特殊的索引选取方式

1
df.iloc[0]     # 返回索引为0的行信息

2、Series 一维数组对象,由一组数据和与之相关的数据标签(索引)组成。

1
2
3
4
5
series = df['列名']
series = df.列名
# 筛选
s2 = series[ series > 100 ]   # 返回大于100的数据集

属性:

1
2
series.index
series.value

方法:

1
2
3
series.value_counts()       # 出现频数
series.unique()                 # 返回对象中的唯一值的np.ndarray。
len( series.unique )          # 查看长度

3、创建DataFrame 与 Series

1、创建Series

1
2
3
4
5
6
7
8
9
10
11
# 1. 字典形式 :
sdata = {"A":'123',"B":'456'}
series1 = pd.Series( sdata )
# 2. 数组形式 :
series2 = pd.Series([1,2,3,4,5] )   # 默认索引从0 开始, ...
series2 = pd.Series([1,2,3,4,5] , index = ['a','b','c','d','e'] )
series2 = pd.Series([1,2,3,4,5] , index = list('abcde') )
# 3. 实数形式 :
series3 = pd.Series(11 , index = list('abc') )

2、创建DataFrame

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1. 字典形式
# 一层字典:
data = {
    'state':['Ohio','Nevada','Ohio'],
    'year':[1999,1888,1777],
    'pop':[1.4,1.2,1.1]
}
df1 = pd.DataFrame(data)          # 列名:pop,year,stats(乱序) , 行索引默认从0开始
df1 = pd.DataFrame(data , columns = ['pop','year','stats'])   # 指定数据表中列名顺序
df1 = pd.DataFrame(data , index = ['one','two','three'] )   # 指定索引
# 两层字典:
data = {
    'A':{'user':'alex','age':20},
    'B':{'user':'eric','age':10},
}
df2 = pd.DataFrame(data)        # 外层字典的key作为列 , 内层key作为行索引
df2 = pd.DataFrame(data , index = ['user','age'])   # 显式指出行索引
# 2. 二维数组
arr = [ [1,2,3,4] , [5,6,7,8] ]
pd.DataFrame(arr)

3、Series  =》 DataFrame

1
pd.DataFrame(Series)
三、分组 GroupBy
1
2
df2 = pd.read_csv("G://..../pokemon.csv",encoding='gbk')
g1 = df2.groupby(['Type 1' , ... ])

重要属性:

1.groups 返回dict {group name -> group labels} , 分组里每个组对应的索引项列表

重要方法:

1.first()  返回组中每一列的第一个值(非NaN)

2.size()  返回分组中类型的个数

3.describe()  生成各种汇总统计,不包括NaN值

4.get_group('xxx')   获取该分组下所有项内容

Aggregation:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 方式一 :
g1.sum()
# 方式二 :
import numpy as np
g1.agg(np.sum)
# 方式三 :
g1.agg(np.sum)[' 列名 ']      # 单独计算某一列
g1[' 列名 '].agg(np.sum)
# 多重计算 :
g1.agg([ np.sum,np.mean,np.std,... ])
# 每一列 都使用不同统计量 (字典)
g1.agg( {"HP":[np.sum,np.mean],"Attack":np.std} )
# 重新命名返回的列
xxxx.rename(columns = {"HP":'aaa',"Attack":"bb"})

Transformation :

  • Transform返回发数据集与原数据集大小一样

  • 每一个函数都是对每一个group进行的操作,不是全部的数据集

  • 不会改变原有group的数据,返回的是新数据

  • 每个函数是作用在每个group里面的column上

1
2
f = lambda s : ( s - s.mean() ) / s.std
g1.transform( f )   # transform 计算非字符型变量

Filtration :

  • 作用于整个group上 或者 作用于某个列

  • 返回DataFrame

1
2
3
df = g1.filter(lambda s : len(s) >= 80 )             # 分组内项总数大于80
df = g1.filter(lambda s : np.mean(s['HP']) >= 60 )   # 分组中HP平均值大于60

  

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多