关注微信公共号:小程在线
关注CSDN博客:程志伟的博客
完整脚本在公共号
加载包
import pandas as pd
df = pd.DataFrame({'语文':[92,87,94],'数学':[80,96,78],
'英语':[89,87,90]},index=['张三','李四','王五'])
df
Out[1]:
语文 数学 英语
张三 92 80 89
李四 87 96 87
王五 94 78 90
读取CSV和XLSX文件数据
df1 = pd.read_csv('F:\Python\用实战玩转Pandas数据分析\科室数据.csv',
encoding='gbk')
df1.head(3)
Out[2]:
机构 科室 就诊人数 增长率
0 第一人民医院 内科 35188.0 9.98%
1 第一人民医院 外科 28467.0 11.27%
2 第一人民医院 内科 13747.0 2.54%
df2 = pd.read_excel('F:\Python\用实战玩转Pandas数据分析\科室数据.xlsx',
encoding='gbk')
df2.tail(3)
Out[3]:
机构 科室 就诊人数 增长率
13 第三人民医院 外科 39048 0.1160
14 第三人民医院 内科 3316 0.0709
15 第三人民医院 外科 2043 0.0504
#查看数据类型
df2.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 16 entries, 0 to 15
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 机构 16 non-null object
1 科室 16 non-null object
2 就诊人数 16 non-null int64
3 增长率 16 non-null float64
dtypes: float64(1), int64(1), object(2)
memory usage: 640.0+ bytes
#查看对数据值的描述
df2.describe()
Out[5]:
就诊人数 增长率
count 16.000000 16.000000
mean 9296.000000 0.083981
std 12865.598455 0.046552
min 1447.000000 0.010400
25% 1988.500000 0.048575
50% 2719.000000 0.085350
75% 7324.000000 0.115775
max 39048.000000 0.165200
#增加新的列
df2['排序']=range(1,len(df2) + 1)
df2.head()
Out[6]:
机构 科室 就诊人数 增长率 排序
0 第一人民医院 内科 35188 0.0998 1
1 第一人民医院 外科 28467 0.1127 2
2 第一人民医院 内科 13747 0.0254 3
3 第一人民医院 外科 5183 0.0247 4
4 第一人民医院 内科 4361 0.0431 5
#删除列
df2.drop('排序',axis=1,inplace=True)
df2.tail()
Out[7]:
机构 科室 就诊人数 增长率
11 第三人民医院 外科 1780 0.1315
12 第三人民医院 内科 1447 0.0104
13 第三人民医院 外科 39048 0.1160
14 第三人民医院 内科 3316 0.0709
15 第三人民医院 外科 2043 0.0504
#选择列数据
df2[['机构','科室','就诊人数']]
Out[8]:
机构 科室 就诊人数
0 第一人民医院 内科 35188
1 第一人民医院 外科 28467
2 第一人民医院 内科 13747
3 第一人民医院 外科 5183
4 第一人民医院 内科 4361
5 第二人民医院 外科 4063
6 第二人民医院 内科 2122
7 第二人民医院 外科 2041
8 第二人民医院 内科 1991
9 第二人民医院 外科 1981
10 第二人民医院 内科 1958
11 第三人民医院 外科 1780
12 第三人民医院 内科 1447
13 第三人民医院 外科 39048
14 第三人民医院 内科 3316
15 第三人民医院 外科 2043
#字符串,替换某列的数据
df2['机构']= df2['机构'].str.replace('第','北京第')
df2.head(6)
Out[9]:
机构 科室 就诊人数 增长率
0 北京第一人民医院 内科 35188 0.0998
1 北京第一人民医院 外科 28467 0.1127
2 北京第一人民医院 内科 13747 0.0254
3 北京第一人民医院 外科 5183 0.0247
4 北京第一人民医院 内科 4361 0.0431
5 北京第二人民医院 外科 4063 0.1157
#数值型计算
df2['就诊人数'] * 2
Out[10]:
0 70376
1 56934
2 27494
3 10366
4 8722
5 8126
6 4244
7 4082
8 3982
9 3962
10 3916
11 3560
12 2894
13 78096
14 6632
15 4086
Name: 就诊人数, dtype: int64
df2['增长率']=df2['增长率'].replace('%','').astype(float)
df2.head()
Out[11]:
机构 科室 就诊人数 增长率
0 北京第一人民医院 内科 35188 0.0998
1 北京第一人民医院 外科 28467 0.1127
2 北京第一人民医院 内科 13747 0.0254
3 北京第一人民医院 外科 5183 0.0247
4 北京第一人民医院 内科 4361 0.0431
#通过计算得到新的列
df2['上期就诊人数']=df2['就诊人数']- df2['就诊人数']*df2['增长率']
df2.head()
Out[12]:
机构 科室 就诊人数 增长率 上期就诊人数
0 北京第一人民医院 内科 35188 0.0998 31676.2376
1 北京第一人民医院 外科 28467 0.1127 25258.7691
2 北京第一人民医院 内科 13747 0.0254 13397.8262
3 北京第一人民医院 外科 5183 0.0247 5054.9799
4 北京第一人民医院 内科 4361 0.0431 4173.0409
df2['就诊日期']='2020-08-18'
df2.head()
Out[13]:
机构 科室 就诊人数 增长率 上期就诊人数 就诊日期
0 北京第一人民医院 内科 35188 0.0998 31676.2376 2020-08-18
1 北京第一人民医院 外科 28467 0.1127 25258.7691 2020-08-18
2 北京第一人民医院 内科 13747 0.0254 13397.8262 2020-08-18
3 北京第一人民医院 外科 5183 0.0247 5054.9799 2020-08-18
4 北京第一人民医院 内科 4361 0.0431 4173.0409 2020-08-18
df2.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 16 entries, 0 to 15
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 机构 16 non-null object
1 科室 16 non-null object
2 就诊人数 16 non-null int64
3 增长率 16 non-null float64
4 上期就诊人数 16 non-null float64
5 就诊日期 16 non-null object
dtypes: float64(2), int64(1), object(3)
memory usage: 896.0+ bytes
#将字符串转为日期
df2['就诊日期']=pd.to_datetime(df2['就诊日期'])
df2.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 16 entries, 0 to 15
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 机构 16 non-null object
1 科室 16 non-null object
2 就诊人数 16 non-null int64
3 增长率 16 non-null float64
4 上期就诊人数 16 non-null float64
5 就诊日期 16 non-null datetime64[ns]
dtypes: datetime64[ns](1), float64(2), int64(1), object(2)
memory usage: 896.0+ bytes
#选择数据行
df2.head()
Out[16]:
机构 科室 就诊人数 增长率 上期就诊人数 就诊日期
0 北京第一人民医院 内科 35188 0.0998 31676.2376 2020-08-18
1 北京第一人民医院 外科 28467 0.1127 25258.7691 2020-08-18
2 北京第一人民医院 内科 13747 0.0254 13397.8262 2020-08-18
3 北京第一人民医院 外科 5183 0.0247 5054.9799 2020-08-18
4 北京第一人民医院 内科 4361 0.0431 4173.0409 2020-08-18
#选择列
df2.iloc[:10,:]
Out[17]:
机构 科室 就诊人数 增长率 上期就诊人数 就诊日期
0 北京第一人民医院 内科 35188 0.0998 31676.2376 2020-08-18
1 北京第一人民医院 外科 28467 0.1127 25258.7691 2020-08-18
2 北京第一人民医院 内科 13747 0.0254 13397.8262 2020-08-18
3 北京第一人民医院 外科 5183 0.0247 5054.9799 2020-08-18
4 北京第一人民医院 内科 4361 0.0431 4173.0409 2020-08-18
5 北京第二人民医院 外科 4063 0.1157 3592.9109 2020-08-18
6 北京第二人民医院 内科 2122 0.1027 1904.0706 2020-08-18
7 北京第二人民医院 外科 2041 0.0706 1896.9054 2020-08-18
8 北京第二人民医院 内科 1991 0.1652 1662.0868 2020-08-18
9 北京第二人民医院 外科 1981 0.0575 1867.0925 2020-08-18
#选择某几列
df2.iloc[:,[0,1,4]]
Out[18]:
机构 科室 上期就诊人数
0 北京第一人民医院 内科 31676.2376
1 北京第一人民医院 外科 25258.7691
2 北京第一人民医院 内科 13397.8262
3 北京第一人民医院 外科 5054.9799
4 北京第一人民医院 内科 4173.0409
5 北京第二人民医院 外科 3592.9109
6 北京第二人民医院 内科 1904.0706
7 北京第二人民医院 外科 1896.9054
8 北京第二人民医院 内科 1662.0868
9 北京第二人民医院 外科 1867.0925
10 北京第二人民医院 内科 1669.9782
11 北京第三人民医院 外科 1545.9300
12 北京第三人民医院 内科 1431.9512
13 北京第三人民医院 外科 34518.4320
14 北京第三人民医院 内科 3080.8956
15 北京第三人民医院 外科 1940.0328
#选择某行某列
df2.iloc[3:8,[0,1,4]]
Out[19]:
机构 科室 上期就诊人数
3 北京第一人民医院 外科 5054.9799
4 北京第一人民医院 内科 4173.0409
5 北京第二人民医院 外科 3592.9109
6 北京第二人民医院 内科 1904.0706
7 北京第二人民医院 外科 1896.9054
#布尔型选择
df2['机构']=='北京第一人民医院'
Out[21]:
0 True
1 True
2 True
3 True
4 True
5 False
6 False
7 False
8 False
9 False
10 False
11 False
12 False
13 False
14 False
15 False
Name: 机构, dtype: bool
df2.loc[df2['机构']=='北京第二人民医院',:]
Out[22]:
机构 科室 就诊人数 增长率 上期就诊人数 就诊日期
5 北京第二人民医院 外科 4063 0.1157 3592.9109 2020-08-18
6 北京第二人民医院 内科 2122 0.1027 1904.0706 2020-08-18
7 北京第二人民医院 外科 2041 0.0706 1896.9054 2020-08-18
8 北京第二人民医院 内科 1991 0.1652 1662.0868 2020-08-18
9 北京第二人民医院 外科 1981 0.0575 1867.0925 2020-08-18
10 北京第二人民医院 内科 1958 0.1471 1669.9782 2020-08-18
#isin函数
df2.loc[df2['机构'].isin(['北京第二人民医院','北京第三人民医院']),['机构','科室','就诊人数']]
Out[23]:
机构 科室 就诊人数
5 北京第二人民医院 外科 4063
6 北京第二人民医院 内科 2122
7 北京第二人民医院 外科 2041
8 北京第二人民医院 内科 1991
9 北京第二人民医院 外科 1981
10 北京第二人民医院 内科 1958
11 北京第三人民医院 外科 1780
12 北京第三人民医院 内科 1447
13 北京第三人民医院 外科 39048
14 北京第三人民医院 内科 3316
15 北京第三人民医院 外科 2043
#数值型的均值、标准值、中位数、最大值、最小值
df2['就诊人数'].mean()
Out[25]: 9296.0
df2['就诊人数'].std()
Out[26]: 12865.598454794086
df2['就诊人数'].median()
Out[27]: 2719.0
df2['就诊人数'].max()
Out[28]: 39048
df2['就诊人数'].min()
Out[29]: 1447
print('就诊人数',df2['就诊人数'].mean())
就诊人数 9296.0
df2['就诊人数']>df2['就诊人数'].mean()
Out[31]:
0 True
1 True
2 True
3 False
4 False
5 False
6 False
7 False
8 False
9 False
10 False
11 False
12 False
13 True
14 False
15 False
Name: 就诊人数, dtype: bool
# &并集
(df2['就诊人数']>df2['就诊人数'].mean()) & (df2['上期就诊人数']>df2['上期就诊人数'].mean())
Out[33]:
0 True
1 True
2 True
3 False
4 False
5 False
6 False
7 False
8 False
9 False
10 False
11 False
12 False
13 True
14 False
15 False
dtype: bool
#根据布尔型选择数据
df2.loc[(df2['就诊人数']>df2['就诊人数'].mean())
& (df2['上期就诊人数']>df2['上期就诊人数'].mean()),:]
Out[36]:
机构 科室 就诊人数 增长率 上期就诊人数 就诊日期
0 北京第一人民医院 内科 35188 0.0998 31676.2376 2020-08-18
1 北京第一人民医院 外科 28467 0.1127 25258.7691 2020-08-18
2 北京第一人民医院 内科 13747 0.0254 13397.8262 2020-08-18
13 北京第三人民医院 外科 39048 0.1160 34518.4320 2020-08-18