Pandas学习笔记

一点点学习Pandas常用命令(一)

  • 示例表格
  • 读取Excel数据
  • 查看表格基本信息
  • 查看行列内容
  • 修改列名
  • 修改列内容(赋值)
  • 查看行内容
  • 修改索引
  • 一个函数搞定常用统计
  • 筛选
  • 新增列
  • 去除空白行和列
  • 待续..............

本文算是学习笔记,是根据“蚂蚁学Python”的视频课《Pandas数据分析从入门到实战》整理的,和我一样的小白如果有兴趣可以去B站搜索,大家一起学习,共同进步!

示例表格

Pandas学习笔记_第1张图片

读取Excel数据

 import numpy as np
 import pandas as pd
 
 data = pd.read_excel(r'E:\xxx\xxx\xxx.xlsx',skiprows=n)
 # "skiprows=n" 表示读取时跳过的开头行数
 df = pd.DataFrame(data)
 read_excel()参数: 
 pandas.read_excel(io,sheet_name = 0,header = 0,names = None,index_col =  	None,usecols = None,squeeze = False,dtype = None, ...)
 参数说明详见:https://www.jianshu.com/p/d1eed925509b

查看表格基本信息

df.shape #查看行数和列数
'''(8, 8)'''
df.columns #列名
'''Index(['序号', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'], dtype='object')'''
df.index #索引
'''RangeIndex(start=0, stop=8, step=1)'''
df.dtypes #每一列的数据类型
'''
序号      int64
星期一    object
星期二    object
星期三    object
星期四    object
星期五    object
星期六     int64
星期日     int64
dtype: object
'''
df.head() #查看前5行
'''   序号 星期一 星期二 星期三 星期四 星期五  星期六  星期日
0      1   数学   书法   美术   语文   体育     1      1
1      2   语文   数学   音乐   英语   思训     2      2
2      3   英语   语文   体育   美术   舞蹈     3      3
3      4   美术   英语   思训   音乐   思训     4      4
4      5   音乐   美术   舞蹈   体育   书法     5      5
'''
df.tail() #查看后5行,()内可选查看行数
'''
   序号 星期一 星期二 星期三 星期四 星期五  星期六  星期日
3   4   美术   英语   思训   音乐   思训     4      4
4   5   音乐   美术   舞蹈   体育   书法     5      5
5   6   体育   音乐   音乐   思训   思训     6      6
6   7   思训   体育   体育   书法   书法     7      7
7   8   舞蹈   思训   思训   思训   数学     8      8
'''
*********************标题行都在*********************
df.info() #表格数据类型信息
'''

RangeIndex: 8 entries, 0 to 7
Data columns (total 8 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   序号       8 non-null      int64 
 1   星期一     8 non-null      object
 2   星期二     8 non-null      object
 3   星期三     8 non-null      object
 4   星期四     8 non-null      object
 5   星期五     8 non-null      object
 6   星期六     8 non-null      int64 
 7   星期日     8 non-null      int64 
dtypes: int64(3), object(5)
memory usage: 416.0+ bytes
None
'''

查看行列内容

df['星期五'].values  #查看列值
'''
0    体育
1    思训
2    舞蹈
3    思训
4    书法
5    思训
6    书法
7    数学
Name: 星期五, dtype: object
'''
df.loc[3].values  #查看行值,取索引值,从0开始,所以是第四行内容
'''
[4 '美术' '英语' '思训' '音乐' '思训' 4 4]
'''

修改列名

df.rename(columns={'pre_name1':'name1','pre_name2':'name2'})
df.rename(columns={'序号':'课时','星期六':'周六','星期日':'周日'})
'''
    课时 星期一 星期二 星期三 星期四 星期五  周六  周日
0  1  数学  书法  美术  语文  体育   1   1
1  2  语文  数学  音乐  英语  思训   2   2
2  3  英语  语文  体育  美术  舞蹈   3   3
3  4  美术  英语  思训  音乐  思训   4   4
4  5  音乐  美术  舞蹈  体育  书法   5   5
5  6  体育  音乐  音乐  思训  思训   6   6
6  7  思训  体育  体育  书法  书法   7   7
7  8  舞蹈  思训  思训  思训  数学   8   8
'''

修改列内容(赋值)

data_index=['第一节','第二节','第三节','第四节','第五节','第六节','第七节','第八节']
df['课时']=data_index
'''
    课时 星期一 星期二 星期三 星期四 星期五  星期六  星期日
0  第一节  数学  书法  美术  语文  体育    1    1
1  第二节  语文  数学  音乐  英语  思训    2    2
2  第三节  英语  语文  体育  美术  舞蹈    3    3
3  第四节  美术  英语  思训  音乐  思训    4    4
4  第五节  音乐  美术  舞蹈  体育  书法    5    5
5  第六节  体育  音乐  音乐  思训  思训    6    6
6  第七节  思训  体育  体育  书法  书法    7    7
7  第八节  舞蹈  思训  思训  思训  数学    8    8
'''

查看行内容

df.loc[[0,3,6],'星期五']
'''
0    体育
3    思训
6    书法
Name: 星期五, dtype: object
'''
df.loc[0:6,'星期五']
'''
0    体育
1    思训
2    舞蹈
3    思训
4    书法
5    思训
6    书法
Name: 星期五, dtype: object
'''
df.loc[[2,4],['课时','星期五']]
'''
    课时 星期五
2  第三节  舞蹈
4  第五节  书法
'''

修改索引

df.set_index('课时',inplace=True)
'''
    星期一 星期二 星期三 星期四 星期五  周六  周日
课时                             
第一节  数学  书法  美术  语文  体育   1   1
第二节  语文  数学  音乐  英语  思训   2   2
第三节  英语  语文  体育  美术  舞蹈   3   3
第四节  美术  英语  思训  音乐  思训   4   4
第五节  音乐  美术  舞蹈  体育  书法   5   5
第六节  体育  音乐  音乐  思训  思训   6   6
第七节  思训  体育  体育  书法  书法   7   7
第八节  舞蹈  思训  思训  思训  数学   8   8
'''
df.loc[['第三节','第五节'],['星期三','星期五']]
'''
    星期三 星期五
课时         
第三节  体育  舞蹈
第五节  舞蹈  书法
好找点儿
'''
data1=['23℃','24℃','25℃','26℃','27℃','28℃','29℃','30℃']
df['周六']=data1
data2=['20℃','21℃','22℃','23℃','24℃','25℃','26℃','27℃']
df['周日']=data2
''' 同时替换多列值的方法还没找到
    星期一 星期二 星期三 星期四 星期五   周六   周日
课时                               
第一节  数学  书法  美术  语文  体育  23℃  20℃
第二节  语文  数学  音乐  英语  思训  24℃  21℃
第三节  英语  语文  体育  美术  舞蹈  25℃  22℃
第四节  美术  英语  思训  音乐  思训  26℃  23℃
第五节  音乐  美术  舞蹈  体育  书法  27℃  24℃
第六节  体育  音乐  音乐  思训  思训  28℃  25℃
第七节  思训  体育  体育  书法  书法  29℃  26℃
第八节  舞蹈  思训  思训  思训  数学  30℃  27℃
'''
df.loc[:,'周六']=df['周六'].str.replace('℃','').astype('int32')
df.loc[:,'周日']=df['周日'].str.replace('℃','').astype('int32')
'''
    星期一 星期二 星期三 星期四 星期五  周六  周日
课时                             
第一节  数学  书法  美术  语文  体育  23  20
第二节  语文  数学  音乐  英语  思训  24  21
第三节  英语  语文  体育  美术  舞蹈  25  22
第四节  美术  英语  思训  音乐  思训  26  23
第五节  音乐  美术  舞蹈  体育  书法  27  24
第六节  体育  音乐  音乐  思训  思训  28  25
第七节  思训  体育  体育  书法  书法  29  26
第八节  舞蹈  思训  思训  思训  数学  30  27

可以用于后续的计算
'''

一个函数搞定常用统计

df.describe()
'''
             周六        周日
count   8.00000   8.00000			#非空值(计数)总数
mean   26.50000  23.50000			#非空值的平均值
std     2.44949   2.44949			#方差
min    23.00000  20.00000			#最小值
25%    24.75000  21.75000			#25%分位数
50%    26.50000  23.50000			#50%分位数(中位数)
75%    28.25000  25.25000			#75%分位数
max    30.00000  27.00000			#最大值
'''
df.T	#转置
'''
课时   第一节  第二节  第三节  第四节  第五节  第六节  第七节  第八节
星期一   数学   语文   英语   美术   音乐   体育   思训   舞蹈
星期二   书法   数学   语文   英语   美术   音乐   体育   思训
星期三   美术   音乐   体育   思训   舞蹈   音乐   体育   思训
星期四   语文   英语   美术   音乐   体育   思训   书法   思训
星期五   体育   思训   舞蹈   思训   书法   思训   书法   数学
周六   23℃  24℃  25℃  26℃  27℃  28℃  29℃  30℃
周日   20℃  21℃  22℃  23℃  24℃  25℃  26℃  27℃
'''
df.describe()
'''
课时     第一节 第二节 第三节 第四节 第五节 第六节 第七节 第八节
count    7   7   7   7   7   7   7   7
unique   7   7   7   6   7   5   5   5
top     数学  数学  舞蹈  思训  音乐  音乐  体育  思训
freq     1   1   1   2   1   2   2   3
count			#非空值总数
unique: 		#唯一值数
top: 			#频数最高者
freq: 			#最高频数
'''

筛选

df.loc[df['周六'] > 24]		#筛选周六列中大于24的所有值
df[df['周六']>24]			#.loc可去掉
'''    星期一 星期二 星期三 星期四 星期五  周六  周日
课时                             
第三节  英语  语文  体育  美术  舞蹈  25  22
第四节  美术  英语  思训  音乐  思训  26  23
第五节  音乐  美术  舞蹈  体育  书法  27  24
第六节  体育  音乐  音乐  思训  思训  28  25
第七节  思训  体育  体育  书法  书法  29  26
第八节  舞蹈  思训  思训  思训  数学  30  27
'''
df.loc[(df['周六'] >= 24) & (df['周日'] <= 27) & (df['星期三'] == '音乐')]
	#多重逻辑'与'筛选
df[(df['周六'] >= 24) & (df['周日'] <= 27) & (df['星期三'] == '音乐')]
	#.loc可以去掉(.loc到底在这起什么作用??)
'''
    星期一 星期二 星期三 星期四 星期五  周六  周日
课时                             
第二节  语文  数学  音乐  英语  思训  24  21
第六节  体育  音乐  音乐  思训  思训  28  25
'''
df.loc[(df['周六'] >= 28) | (df['周日'] >= 24) | (df['星期三'] == '音乐')]
#逻辑'或'筛选
'''
    星期一 星期二 星期三 星期四 星期五  周六  周日
课时                             
第二节  语文  数学  音乐  英语  思训  24  21
第五节  音乐  美术  舞蹈  体育  书法  27  24
第六节  体育  音乐  音乐  思训  思训  28  25
第七节  思训  体育  体育  书法  书法  29  26
第八节  舞蹈  思训  思训  思训  数学  30  27
'''
df.loc[lambda df:(df['周六'] >= 24)&(df['周日']<=24)]
#lambda函数筛选
'''
    星期一 星期二 星期三 星期四 星期五  周六  周日
课时                             
第二节  语文  数学  音乐  英语  思训  24  21
第三节  英语  语文  体育  美术  舞蹈  25  22
第四节  美术  英语  思训  音乐  思训  26  23
第五节  音乐  美术  舞蹈  体育  书法  27  24
'''
def my_date(df):
	return df.index.str.startswith('第')&df['星期三']=='音乐'
df.loc[my_date,:]
#导入函数筛选
函数式编程的本质:函数自身可以像变量一样传递
语法有错误,暂未实现

新增列

df['新增列'] = [11,22,33,44,55,66,77,88]
'''
    星期一 星期二 星期三 星期四 星期五  周六  周日  新增列
课时                                  
第一节  数学  书法  美术  语文  体育  23  20   11
第二节  语文  数学  音乐  英语  思训  24  21   22
第三节  英语  语文  体育  美术  舞蹈  25  22   33
第四节  美术  英语  思训  音乐  思训  26  23   44
第五节  音乐  美术  舞蹈  体育  书法  27  24   55
第六节  体育  音乐  音乐  思训  思训  28  25   66
第七节  思训  体育  体育  书法  书法  29  26   77
第八节  舞蹈  思训  思训  思训  数学  30  27   88
'''
df.insert(1,'再增一列',[111,222,333,444,555,666,777,888])
#指定位置
'''
    星期一  再增一列 星期二 星期三 星期四 星期五  周六  周日  新增列
课时                                        
第一节  数学   111  书法  美术  语文  体育  23  20   11
第二节  语文   222  数学  音乐  英语  思训  24  21   22
第三节  英语   333  语文  体育  美术  舞蹈  25  22   33
第四节  美术   444  英语  思训  音乐  思训  26  23   44
第五节  音乐   555  美术  舞蹈  体育  书法  27  24   55
第六节  体育   666  音乐  音乐  思训  思训  28  25   66
第七节  思训   777  体育  体育  书法  书法  29  26   77
第八节  舞蹈   888  思训  思训  思训  数学  30  27   88
**索引列不计算在内**
'''
df['周六-周日'] = df['周六'] - df['周日']
'''
    星期一 星期二 星期三 星期四 星期五  周六  周日  周六-周日
课时                                    
第一节  数学  书法  美术  语文  体育  23  20      3
第二节  语文  数学  音乐  英语  思训  24  21      3
第三节  英语  语文  体育  美术  舞蹈  25  22      3
第四节  美术  英语  思训  音乐  思训  26  23      3
第五节  音乐  美术  舞蹈  体育  书法  27  24      3
第六节  体育  音乐  音乐  思训  思训  28  25      3
第七节  思训  体育  体育  书法  书法  29  26      3
第八节  舞蹈  思训  思训  思训  数学  30  27      3
新增列同时用计算结果赋值
'''
df.apply()
----------
def get_type(df):
	if df['周六'] > 28:
		return '大'
	if df['周六'] < 25:
		return '小'
	else:
		return '不大不小'
df['新增比较大小的列'] = df.apply(get_type,axis = 1)
#增加1列
'''
    星期一 星期二 星期三 星期四 星期五  周六  周日 新增比较大小的列
课时                                      
第一节  数学  书法  美术  语文  体育  23  20        小
第二节  语文  数学  音乐  英语  思训  24  21        小
第三节  英语  语文  体育  美术  舞蹈  25  22     不大不小
第四节  美术  英语  思训  音乐  思训  26  23     不大不小
第五节  音乐  美术  舞蹈  体育  书法  27  24     不大不小
第六节  体育  音乐  音乐  思训  思训  28  25     不大不小
第七节  思训  体育  体育  书法  书法  29  26        大
第八节  舞蹈  思训  思训  思训  数学  30  27        大
'''
df['新增比较大小的列'].value_counts()
'''
不大不小    4
大       2
小       2
Name: 新增比较大小的列, dtype: int64
'''

#增加多列

去除空白行和列

df = df.dropna(axis=0,how='all',inplace=True)
df = df.dropna(axis=1,how='all',inplace=True)

"""参数说明"""
'''
axis=0(1) #去除行(列)
how='all'#所有内容为空白时去除
how='any'#只要有空白内容就去除
inplace=True(False)#更新原表格(/返回新表格) 
'''

待续…

你可能感兴趣的:(pandas,python,数据分析)