matplotlib画图
numpy处理数值型数组
pandas数值型数组、字符串、时间序列、列表、字典所有数据类型
Pandas
使用中存在降维,提高运行速度。DataFrame-Series-Python单值
-
Pandas数据读取
pd.read_csv(),csv、tsv、txt,用逗号\tab分隔的纯文本文件
-
读取csv,使用默认的标题行、逗号分隔符
rating = pd.read_csv(path)
head()、shape()行列元组、columns列名列表、index索引序列、dtype每列数据类型
-
读取txt文件,自己指定分隔符、列名
pvuv = pd.read_csv(path,** sep='\t'**, **header=None, names=['l1', 'l2', 'l3']**)
pd.read_excel(),微软xls或xlsx文件
pd.read_sql(),mysql关系型数据库表
-
-
Pandas数据结构
-
DataFrame & Series
-
Series
一维数据,一行或一列。
-
数据列表创建series
s1 = pd.Series([1,'a',5.2,7]) # 左侧由上到下索引0-3,右侧列表的数据
index、values
-
创建具有标签索引的series
s2 = pd.Series([1,'a',5.2,7], index=['d','b','a','c'])# 左侧由上到下索引dbac,右侧列表的数据
-
使用python字典创建series
sdata = {'a':1,'b':2,'c':3} s3 = pd.Series(sdata) # 键=索引,值=数据
类似dict的查询方式
s3[‘a’]返回一个索引数据(python原生数据类型),s3[[‘a’,'b]]返回两个索引的数据(series类型)
-
-
DataFrame
二维数据,行索引index,列表名columns。表格型数据结构,行索引和series行索引对应,每一列可不同数据类型
-
多个字典序列创建dataframe
data = {'a':[1,2,3,4],'b':[5,6,7,8],'c':[0,9,8,7]} df = pd.DataFrame(data)# 行索引默认0-3,列索引abc
-
-
从DataFrame中查询出Series
只查询一行或一列,返回series,多行、多列返回dataframe
-
查询列
df[‘a’]返回series,df[[‘a’,'b]]返回dataframe
-
查询行
DataFrame切片包含右侧
df.loc[1] # 第1行 df.loc[1:3]# 1~3行
-
-
-
-
Pandas数据查询
df.set_index('把读到的一列作为行索引',inplace=True) #直接改变df df.loc[:,'列名'] = df['列名'].str.replace("C", "").astype('int32')
df.loc()根据行、列的标签值查询;既能查询,又能覆盖写入
-
按单个label值
df.loc['行', '列'] df.loc['行',['列1','列2']]
-
按值列表批量查询
df.loc[['行1','行2'],'列1'] df.loc[['行1','行2'],['列1','列2']]
-
按数值区间范围查询
df.loc['行1':'行5', '列']# 1-5行,series df.loc['行1', '列1':'列5']# 1-5列,series df.loc['行1':'行5', '列1':'列5']# 1-5行,1-5列
-
按条件表达式
df.loc[df['列1']<10, :] # 只返回表达式boolean为True的行
-
调用函数
df.loc[lamda df : (df['列1']<10), :] # 类似条件表达式
-
-
Pandas新增数据列
-
直接赋值
df.loc[:, 'new'] = df['old']
-
df.apply方法
沿着DataFrame的轴
df.loc[:,'列1'] = df.apply(hanshu, axis=1) # axis=1遍历行,=0遍历列 df['列1'].value_counts() # 对每个值记次数
-
df.assign方法
不修改本身,返回新对象。增加多个新的列
-
按条件选择分组分别赋值
df['new'] = '' df.loc[df['列1']<10, 'new'] = '小'
-
-
Pandas数据统计函数
-
Pandas缺失值处理
检测:isnull、notnull
丢弃:dropna
填充:fillna
-
Pandas的报警SettingWithCopyWarning
pandas的dataframe的修改写操作,只允许在源dataframe上进行
df.loc[condition,'aa']# 将get+set的两步操作,改成set的一步操作 #或者先复制copy,再对复制的修改
-
Pandas数据排序
-
Series
sort_values(ascending=)
-
DataFrame
-
单列排序
df.sort_values(by=‘a’ , ascending=)
-
多列排序
df.sort_values(by=[‘a’, ‘b’] , ascending=[False,True])
-
-
-
Pandas字符串处理
-
获取Series的str属性,使用字符串处理函数
df[’’].str
-
布尔条件查询
condition = df[’’].str.startwith[’’]
df[condition]
-
多次str处理的链式操作
-
使用正则表达式的处理
df[''].str.replace("[年月日]","") # Series.str默认开启了正则表达式模式
-
-
Pandas的axis参数
按哪个axis,遍历哪个axis,另一个不动
-
Pandas的索引index用途
-
使用index查询数据
df.set_index('id', inplace=True, drop=False) # 索引设为id列值,默认会删除id列,
-
使用index提升查询性能
哈希表、二分查找、扫描
-
使用index能自动对齐数据
s1+s2
-
更多更强大的数据结构支持
-
-
Pandas的Merge语法
-
电影数据集的join实例
把相同key的俩表合并join起来
df_ratings_users = pd.merge( df_ratings, df_users, left_on="UserID", right_on="UserID", how="inner" )
-
理解merge时一对一、一对多、多对多的数量对齐关系
一对多、多对多(列数不变),会有复制m*n
-
left\right\inner\outer join的区别
-
inner join
左边和右边都有的key,才出现在结果
-
outer
左右和右边都会出现,不匹配则Null
-
left
左边的都会出现在结果,右边无法匹配则Null
-
right
右边都有
-
-
出现非key字段重名
会自动加上后缀,参数suffixes=(‘zuo’, ‘you’)
-
-
Pandas的Concat、append
批量合并相同格式的excel、给DataFrame添加行(append)、列(merge)
语法:使用某种合并方式(inner、outer),沿着某方向(axis=0/1),把多个pandas对象合并
pd.concat([df1, df2], axis=0, join=outer, ignore_index=False) # 这里是默认参数
-
Pandas批量拆分与合并Excel文件
通过dataframe中转~~,怎么写~
-
待更新,2021年11月21日21点48分