Python pandas清洗数据(一)

关注微信公共号:小程在线

关注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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值