一. pandas入门介绍(一)

一.数据集

https://www.gairuo.com/file/data/dataset/team.xlsx

在这里插入图片描述
读取数据

#读取数据
    df = pd.read_excel('https://www.gairuo.com/file/data/dataset/team.xlsx')
    #或df = pd.read_excel('team.xlsx')
    print(df)
        name team  Q1  Q2  Q3  Q4
0      Liver    E  89  21  24  64
1       Arry    C  36  37  37  57
2        Ack    A  57  60  18  84
3      Eorge    C  93  96  71  78
4        Oah    D  65  49  61  86
..       ...  ...  ..  ..  ..  ..
95   Gabriel    C  48  59  87  74
96   Austin7    C  21  31  30  43
自动增加了第一列,为数据增加的索引

二.查看数据

    print('head():',df.head())#前5条
    print('head(10)',df.head(10))#前10条
    print('tail()',df.tail())#后5条,括号可以写明想看的条数
    print('sample()',df.sample())#随机1条,括号可以写明想看的条数
head():     name team  Q1  Q2  Q3  Q4
0  Liver    E  89  21  24  64
1   Arry    C  36  37  37  57
2    Ack    A  57  60  18  84
3  Eorge    C  93  96  71  78
4    Oah    D  65  49  61  86
head(10)      name team  Q1  Q2  Q3  Q4
0   Liver    E  89  21  24  64
1    Arry    C  36  37  37  57
2     Ack    A  57  60  18  84
3   Eorge    C  93  96  71  78
4     Oah    D  65  49  61  86
5  Harlie    C  24  13  87  43
6    Acob    B  61  95  94   8
7    Lfie    A   9  10  99  37
8  Reddie    D  64  93  57  72
9   Oscar    A  77   9  26  67
tail()         name team  Q1  Q2  Q3  Q4
95   Gabriel    C  48  59  87  74
96   Austin7    C  21  31  30  43
97  Lincoln4    C  98  93   1  20
98       Eli    E  11  74  58  91
99       Ben    E  21  43  41  74
sample()       name team  Q1  Q2  Q3  Q4
35  Samuel    B   9  38  88  66

三. 验证数据

print('df.shape',df.shape)#(100, 6)行数和列数
    print('df.describe()',df.describe())
    '''
    count  100.000000  100.000000  100.000000  100.000000   总数
    mean    49.200000   52.550000   52.670000   52.780000   平均数
    std     29.962603   29.845181   26.543677   27.818524   标准差
    min      1.000000    1.000000    1.000000    2.000000   最小值
    25%     19.500000   26.750000   29.500000   29.500000   四分位数
    50%     51.500000   49.500000   55.000000   53.000000   四分位数
    75%     74.250000   77.750000   76.250000   75.250000   四分位数
    max     98.000000   99.000000   99.000000   99.000000   最大值
    '''

四.建立索引

    df.set_index('name',inplace=True)#name作为索引
    print(df)
    '''
         team  Q1  Q2  Q3  Q4
name                         
Liver       E  89  21  24  64
Arry        C  36  37  37  57
Ack         A  57  60  18  84
Eorge       C  93  96  71  78
Oah         D  65  49  61  86
...       ...  ..  ..  ..  ..
Gabriel     C  48  59  87  74
Austin7     C  21  31  30  43
Lincoln4    C  98  93   1  20
Eli         E  11  74  58  91
Ben         E  21  43  41  74
[100 rows x 5 columns]
    '''

五.数据选取

1. 选择列

    print(df.Q1)#df['Q1']
    '''
name
Liver       89
Arry        36
Ack         57
Eorge       93
Oah         65
            ..
Gabriel     48
Austin7     21
Lincoln4    98
Eli         11
Ben         21
Name: Q1, Length: 100, dtype: int64
    '''
    print(df.loc[:,['team','Q1']])#df[['team','Q1']].自然索引用df.iloc[]
    '''
             team  Q1
name             
Liver       E  89
Arry        C  36
Ack         A  57
Eorge       C  93
Oah         D  65
...       ...  ..
Gabriel     C  48
Austin7     C  21
Lincoln4    C  98
Eli         E  11
Ben         E  21

[100 rows x 2 columns]

2.选择行

    print(df[df.index == 'Liver'])
    '''
    name                      
    Liver    E  89  21  24  64
    '''
    #自然索引,类似列表切片
    print(df[0:3])#前三行
    '''
      team  Q1  Q2  Q3  Q4
name                      
Liver    E  89  21  24  64
Arry     C  36  37  37  57
Ack      A  57  60  18  84
    '''
    print(df[0:10:2])#前10行,步长2.取0,2,4,6,8
    '''
       team  Q1  Q2  Q3  Q4
name                       
Liver     E  89  21  24  64
Ack       A  57  60  18  84
Oah       D  65  49  61  86
Acob      B  61  95  94   8
Reddie    D  64  93  57  72
    '''
    print(df.iloc[:10,:])#前10个
    '''
        team  Q1  Q2  Q3  Q4
name                       
Liver     E  89  21  24  64
Arry      C  36  37  37  57
Ack       A  57  60  18  84
Eorge     C  93  96  71  78
Oah       D  65  49  61  86
Harlie    C  24  13  87  43
Acob      B  61  95  94   8
Lfie      A   9  10  99  37
Reddie    D  64  93  57  72
Oscar     A  77   9  26  67
    '''

3.指定行和列

print(df.loc['Eorge':'Lfie','Q1':'Q4'])
'''
           Q1  Q2  Q3  Q4
name                     
Eorge      93  96  71  78
Oah        65  49  61  86
Harlie     24  13  87  43
Acob       61  95  94   8
Lfie        9  10  99  37
'''
print(df.iloc[0:5,:])#前5行
'''
name                      
Liver    E  89  21  24  64
Arry     C  36  37  37  57
Ack      A  57  60  18  84
Eorge    C  93  96  71  78
Oah      D  65  49  61  86
'''

4.一定条件显示数据

print(
    df[
        (df['team'] == 'C')&
        (df.Q1>90)
    ]
)
'''
          team  Q1  Q2  Q3  Q4
name                          
Eorge        C  93  96  71  78
Alexander    C  91  76  26  79
Lincoln4

六.排序

print(df.sort_values(by='Q1'))#Q1升序
print(df.sort_values(['team','Q1'],ascending=[True,False]))#team升序,Q1降序.先team后Q1

七.分组聚合

print(df.groupby('team').sum())#求和
'''
        Q1    Q2    Q3    Q4
team                        
A     1066   639   875   783
B      975  1218  1202  1136
C     1056  1194  1068  1127
D      860  1191  1241  1199
E      963  1013   881  1033
'''
print(df.groupby('team').mean())#平均
'''
             Q1         Q2         Q3         Q4
team                                            
A     62.705882  37.588235  51.470588  46.058824
B     44.318182  55.363636  54.636364  51.636364
C     48.000000  54.272727  48.545455  51.227273
D     45.263158  62.684211  65.315789  63.105263
E     48.150000  50.650000  44.050000  51.650000
'''
print(df.groupby('team').agg(
    {
        'Q1':sum,
        'Q2':'count',#总数
        'Q3':'mean',
        'Q4':max
    }
))
'''
        Q1  Q2         Q3  Q4
team                         
A     1066  17  51.470588  97
B      975  22  54.636364  99
C     1056  22  48.545455  98
D      860  19  65.315789  99
E      963  20  44.050000  98
'''

八.数据转换

print(df.groupby('team').sum().T)
'''
team     A     B     C     D     E
Q1    1066   975  1056   860   963
Q2     639  1218  1194  1191  1013
Q3     875  1202  1068  1241   881
Q4     783  1136  1127  1199  1033
'''
print(df.groupby('team').sum().stack())
'''
team    
A     Q1    1066
      Q2     639
      Q3     875
      Q4     783
B     Q1     975
      Q2    1218
      Q3    1202
      Q4    1136
C     Q1    1056
      Q2    1194
      Q3    1068
      Q4    1127
D     Q1     860
      Q2    1191
      Q3    1241
      Q4    1199
E     Q1     963
      Q2    1013
      Q3     881
      Q4    1033
dtype: int64
'''
print(df.groupby('team').sum().unstack())
'''
    team
Q1  A       1066
    B        975
    C       1056
    D        860
    E        963
Q2  A        639
    B       1218
    C       1194
    D       1191
    E       1013
Q3  A        875
    B       1202
    C       1068
    D       1241
    E        881
Q4  A        783
    B       1136
    C       1127
    D       1199
    E       1033
dtype: int64
'''

八.增加列

df['one'] = 1#增加一个固定值的列
df['total'] = df.Q1 + df.Q2 + df.Q3 + df.Q4#总和列
'''
或
df['total'] = df.loc[:,'Q1':'Q4'].apply(
    lambda x:sum(x),
    axis = 1#axis=1以后就是将一个矩阵的每一列向量相加
)
'''
print(df.head())
'''
      team  Q1  Q2  Q3  Q4  one  total
name                                  
Liver    E  89  21  24  64    1    198
Arry     C  36  37  37  57    1    167
Ack      A  57  60  18  84    1    219
Eorge    C  93  96  71  78    1    338
Oah      D  65  49  61  86    1    261
'''
df['total'] = df.sum(axis=1)#所有数值列相加
print(df.head())
'''
      team  Q1  Q2  Q3  Q4  one  total
name                                  
Liver    E  89  21  24  64    1    397
Arry     C  36  37  37  57    1    335
Ack      A  57  60  18  84    1    439
Eorge    C  93  96  71  78    1    677
Oah      D  65  49  61  86    1    523
'''

九.统计分析

print(df.mean())#所有列的均值
'''
Q1    49.20
Q2    52.55
Q3    52.67
Q4    52.78
'''
#df.mean(axis=1)所有行的均值,下同
print(df.corr())#列与列之间的相关系数
'''
          Q1        Q2        Q3        Q4
Q1  1.000000  0.142088 -0.125436 -0.010781
Q2  0.142088  1.000000  0.056270 -0.033213
Q3 -0.125436  0.056270  1.000000  0.041418
Q4 -0.010781 -0.033213  0.041418  1.000000
'''
print(df.count())#返回每一列中非空值的个数
'''
team    100
Q1      100
Q2      100
Q3      100
Q4      100
'''
'''
df.max()每一列最大值
df.min()每一列最小值
df.median()每一列中位数
df.std()每一列标准差
df.var()每一列方差
df.mode()每一列众数
'''

十.绘图

    df['Q1'].plot()#Q1成绩的折线分布
    plt.show()

在这里插入图片描述

 df.loc['Ben','Q1':'Q4'].plot()
 plt.show()

在这里插入图片描述

    df.loc['Ben','Q1':'Q4'].plot.bar()#柱形图
    plt.show()
    df.loc['Ben', 'Q1':'Q4'].plot.barh()#横向柱形图
    plt.show()

在这里插入图片描述
在这里插入图片描述

    df.groupby('team').sum().T.plot()#数据聚合计算后,绘制多条折线图
    plt.show()
    df.groupby('team').count().Q1.plot.pie()  # 数据聚合计算后,绘制饼图
    plt.show()

在这里插入图片描述
在这里插入图片描述

十一.导出

df.to_excel('team-done.xlsx')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值