人工智能学习----Pandas进阶及统计分析

目录

• 基本数据对象及操作
• 数据清洗
• 数据合并及分组
• 透视表

一、基本数据对象及操作

1、Series
在这里插入图片描述

•  类似一维数组的对象
• 通过list构建Series
	○ ser_obj = pd.Series(range(10))
• 由数据和索引组成
	○ 索引在左,数据在有
	○ 索引是自动创建的
	
 **Series索引**
 
	• 获取数据和索引
		○ ser_obj.index, ser_obj.values
	• 预览数据
		○ ser_obj.head(n)  #预览数据的前n行
	• 通过索引名(字符串)获取数据,ser_obj['name'],或ser_obj.loc['name']
		○ 如果索引名不存在则创建一项记录
	• 通过索引位置(整型数据)获取数据源,ser_obj.iloc[2]
	• 通过dict构建Series
	• name属性
		○ ser_obj.name: 给数据命名
		○ ser_obj.index.name: 给索引命名
	• Pandas会根据数据类型自动处理缺失数据
		○ object---->None
		○ float----->NaN

2、DataFrame
在这里插入图片描述

• 类似多维数组/表格数据
• 每列数据可以是不同类型
• 索引包括行索引(index)和列索引(label)

创建DataFrame

• 通过ndarray构建DataFrame
• 通过dict构建
	○ data = {'key': values, …..}
	  df = pd.DataFrame(data,index=[…]
• 添加
	○ df['a'] = […..]

DataFrame索引

• 按行索引
	○ print(df.loc['CH'])   #根据行的名称
	○ print(df.il oc[1])  #根据行的位置  
• 按列索引
	○ print(df['Area'])
	○ 不连续索引:df_obj[ [‘label1’, ‘label2’] ]
• 切片索引,ser_obj[2:4], ser_obj[‘label1’: ’label3’]
	○  注意,按索引名切片操作时,是包含终止索引的。
• 注意从DataFrame中取出的数据进行操作后,会对原始数据产生影响。为了保证不对原始数据产生影响,应该使用copy()产生一个副本。在副本上进行 操作。 

删除数据操作

• df.drop('CH')  #注意此操作不会对原始数据产生影响
• df.drop(['CH'],inplace = True)    #会对原始数据产生影响
• df.drop(['Region'], axis = 1, inplace = True)  ##删除列时,需要指定axis = 1,删除行时不需要因为axis默认为0
• 也可用 del df['Area']

DataFrame操作与加载

• ranks = df['Happiness Rank']
ranks = ranks+2      #此种操作会对原始数据产生影响,尽量不要用
• ranks = df['Happiness Rank'].copy()           #用copy方法不会改变原始数据
ranks += 2

数据读取

• pd.read_csv('filename', index_col = ' …', usecols = '…') 
	○  index_col: 指定索引列 
	○  usecols:指定需要读取的列
• reprot_2016_df.head(n)   # 数据预览

在这里插入图片描述

在这里插入图片描述
Boolean Mask

在这里插入图片描述

层级索引

• MultiIndex对象 
•  set_index([‘a’,’b’], inplace=True),注意a, b的先后顺序 
•  选取子集 • 外层选取 ser_obj.loc[‘outer_index’] 
•  内层选取 ser_obj.loc[‘out_index’, ‘inner_index’]
•  常用于分组操作、透视表的生成等
•  交换分层顺序
	○  swaplevel()
•  排序分层 
	○  sort_index(level= )

二、数据清洗

1、处理缺失数据

	• 判断数据缺失
		○ ser_obj.isnull(), df_obj.isnull(),相反操作为notnull()
	• 处理缺失数据 
	•  df.fillna(n),将缺失值置为n
	• df.dropna() ,将缺失值删除
	•  df.ffill(),按之前的数据填充
	•  df.bfill(),按之后的数据填充
	•  项目中使用ffill或bfill时,注意数据的排列顺序

2、数据变形

• 处理重复数据
	○  data.duplicated(),判断数据是否重复
	○ 去除重复数据,data.drop_duplicates()
	○ data.drop_duplicates(['k1']),# 去除指定列的重复数据; data.drop_duplicates(['k1','k2'], keep = 'last') #keep指定保留哪一个
	
• 使用函数或map转化数据
	○ 使用函数或map转化数据,通常根据字典进行数据转化
	○ data['animal'] = lowercased.map(meat_to_animal)
	○ #使用方法来添加,lambda函数
	○ data['animal2'] = data['food'].map(lambda x: meat_to_animal[x.lower()])
	
• 替换值,replace()
	○ data.replace(-999,np.nan),将-999替换为nan
	
• 离散化和分箱操作
	• ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
	• #分箱边界
	• bins = [18, 25, 35, 60, 100]
	• cats = pd.cut(ages, bins)
	
• 哑变量操作
	○ pd.get_dummies()
	
• 向量化字符串操作
	• 字符串列元素中是否包含子字符串,ser_obj.str.contains()
	• 字符串列切片操作,ser_obj.str[a:b]
	• split_df = data.str.split('@', expand = True) #以@为分隔符,将邮箱分开,expand默认是False
	• split_df[0].str.cat(split_df[1], sep = '@')  #将字符串合并,以@连接

三、数据合并及分组

1、数据分组
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

	• groupby
		○ grouped = reprot_data.groupby('Region')
		○ grouped.size() #返回每个分组的元素个数

四、透视表

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Mason_Chen/article/details/109005650
今日推荐