本文算是学习笔记,是根据“蚂蚁学Python”的视频课《Pandas数据分析从入门到实战》整理的,和我一样的小白如果有兴趣可以去B站搜索,大家一起学习,共同进步!
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)#更新原表格(/返回新表格)
'''