二次回顾学习Pandas记录归纳内容,参考学习内容
数据鲸的 joyful-pandas 板块
文章目录
1. 文件的读写
1.1 文件读取
# 读取csv/txt/excel文件
df_csv=pd.read_csv(path)
df_txt=pd.read_table(path)
df_excel=pd.read_excel(path)
# 参数说明: 以上三个函数共用
pd.read_csv(path
,header=None # 第一行不作为列名
,index_col=['col1','col2'] # 把某一列或几列作为索引
,usecols=['col1','col2'] # 读取列的集合
,parse_dates=['col1','col2'] # 转化为时间的列
,nrows=x # 读取的数据行数
)
- 加载数据时 各级目录间是 / 或者 \
- 可以通过os.getcwd()获取到该文件所在的绝对路径地址
- 加载数据时,可以通过 chunksize= 条件来逐块读取数据,也可以通过 nrows= 条件来读取数据的前多少行
- 加载csv数据默认是以’,‘分隔,加载tsv数据默认是’\t’分隔,可通过sep=’,'改变加载数据时的分隔方式
- 加载数据时,若数据中不含有列名那一行,要添加header=None条件,不然会将第一行数据作为列名
- 加载数据时,通过index_col=条件可以设置行索引,可以通过name=[]来设置行索引,通过header=0设置读取数据是不读取第一行数据
- 数据的观察 ; df.info() df.shape df.describe()等
- 数据的保存 : df.to_csv(“数据表名称”)
1.2 数据写入
df_csv.to_csv(path, index = false)
df_excel.to_excel(path, index = false)
df_csv.to_markdown() # 表格转换为markdown语言
df_csv.to_latex() # 表格转换为latex语言
to_markdown()/to_latex()
需安装tabulate包
无to_table()
函数,可使用to_csv()
保存为txt文件
2. 基本数据结构
2.1 Series序列
series=pd.Series(date = []
,index = pd.index([])
,dtype = 数据结构
,name = 'series_name')
# 属性可通过.方式获取
series.values
series.index
series.dtype
series.name
series.shape
2.2 DataFrame数据框
df=pd.DataFrame(date = []
,index = []
,columns = []
)
df[col_name] # 取一列 = series
df[[col_list]] # 取多列 = DataFrame df[['col_0', 'col_1']]
# 属性可通过.方式获取
df.values
df.index
df.columns
df.dtypes
df.shape
3. 常用基本函数
3.1 汇总函数
df.head()
df.tail()
df.info() # 信息概框
df.describe() # 数值列对应的主要统计量
3.2 特征统计函数
返回标量,公共参数axis,0逐列聚合,1逐行聚合
df.sum()/mean()/var()/std()/max()/min()
df.quantile(0.75) # 分位数
df.count() # 非缺失值个数
df.idxmax() # 最大值对应的索引
3.3 唯一值函数
df['col_name'].unique() # 唯一值组成的列表
df['col_name'].nunique() # 唯一值的个数
df['col_name'].value_counts() # 唯一值和其对应出现的频数
# 获取多个列组合的唯一值
df.drop_duplicates(['col_name1','col_name2']
,keep=first # 每个组合保留第一次出现的所在行
# ,keep=last # 每个组合保留最后一次出现的所在行
# ,keep=false # 所有重复组合所在的行剔除
)
duolicated()
与drop_duplicates()
功能类似,只是返回是否为唯一值的布尔列表,keep参数与后者一致,重复元素为true,否则为false
3.4 替换函数
一般而言,替换操作是针对某一列进行的
三类替换函数:
- 映射替换:repalce() / str.replace() / cat.codes()
- 逻辑替换:where() / mask()
- 数值替换:round() / abs() / clip()
# 四舍五入、取绝对值和截断
df['Gender'].replace({'Female':0,'Male':1}).head() # 字典构造替换
# 等价于
df['Gender'].replace(['Female','Male'],[0,1]).head() # 列表替换
replace([],method='ffill'/'bfill') # 用前面一个最近的未被替换的值进行替换 / 用后面最近的未被替换的值进行替换
df.where(df['colname']<60,100) # 传入条件为false对应行进行替换
df.mask(df['colname']<60,100) # 传入条件为true对应行进行替换
df.where([True,False,False,True,...]) # 传入的条件也可为与索引一致的布尔序列
df['colname'].round(2)
df['colname'].abs()
df['colname'].clip(0,2) # 前两个数分别表示上下截断边界
3.5 排序函数
两种方式:
- 值排序:sort_values()
- 索引排序:sort_index()
df.sort_values('colname',ascending=True/False) # 默认为升序
df.sort_values(['colname1','colname2'],ascending=[True,False]) # 多列排序
df.sort_index(level=['colname'],ascending=True/False) # 需要指定索引层的名字或者层号,用参数level表示
df.sort_index(level=['colname1','colname2'],ascending=[True,False])
3.6 apply方法
apply方法常用于DataFrame的行迭代或者列迭代,apply的参数往往是一个以序列为输入的函数
df_demo.apply(lambda x:x.mean()) # x就指代被调用的df_demo表中逐个输入的序列
4. 窗口对象
三类窗口:
- 滑动窗口:rolling()
- 扩张窗口:expanding()
- 指数加权窗口:ewm()
4.1 滑窗对象
要使用滑窗函数,就必须先要对一个序列使用.rolling得到滑窗对象,其最重要的参数为窗口大小window
s.rolling(window = 3)
# shift, diff, pct_change是一组类滑窗函数
s.shift(n) # 向前第n个元素的值
s.diff(n) # 向前第n个元素做差
s.pct_change(n) # 向前第n个元素相比计算增长率
4.2 扩张窗口
扩张窗口又称累计窗口,一个动态长度的窗,其窗口的大小就是从序列开始处到具体操作的对应位置
设序列为a1, a2, a3, a4,则其每个位置对应的窗口即[a1]、[a1, a2]、[a1, a2, a3]、[a1, a2, a3, a4]
s.expanding()
cummax, cumsum, cumprod函数是典型的类扩张窗口函数