一、数据读取
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.切片
2.特殊的索引选取方式
2、Series 一维数组对象,由一组数据和与之相关的数据标签(索引)组成。
1 2 3 4 5 | series = df[ '列名' ]
series = df.列名
# 筛选
s2 = series[ series > 100 ] # 返回大于100的数据集
|
属性:
方法:
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
三、分组 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 :
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
|
|