Python数据分析之pandas学习的代码部分

以下代码为我在学习《Python数据分析之pandas学习》是所敲的代码。原文章地址:Python数据分析之pandas学习

代码如下:

#-*- coding: UTF-8 -*-
'''
Python数据分析之pandas学习
博客地址:https://www.cnblogs.com/nxld/p/6058591.html
'''

import numpy as np
import pandas as pd

def main():
    '''Series (1)通过一维数组创建序列
    arry1=np.arange(10)
    print(arry1)
    print(type(arry1))
    print("****")
    s1=pd.Series(arry1)
    print(arry1)
    print(type(s1))
    '''

    '''Series (2)通过字典创建序列
    dic1 = {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50}
    print(dic1)
    print(type(dic1))
    print("****")
    s2=pd.Series(dic1)
    print(s2)
    print(type(s2))
    '''

    ''' DataFrame (1)通过二维数组创建数据框
    arrry2=np.array(np.arange(12).reshape(3,4)) #3行4列
    print(arrry2)
    print(type(arrry2))
    print("****")
    df1=pd.DataFrame(arrry2)
    print(df1)
    print(type(df1))
    '''

    '''
    DataFrame (2)通过字典创建数据框、  
    dic2 = {'a': [1, 2, 3, 4], 'b': [5, 6, 7, 8],
            'c': [9, 10, 11, 12], 'd': [13, 14, 15, 16]}
    print("dic2\n%s"%dic2)
    print(type(dic2))
    df2=pd.DataFrame(dic2)
    print("df2:\n%s"%df2)
    print(type(df2))

    print ("****")

    dic3 = {'one': {'a': 1, 'b': 2, 'c': 3, 'd': 4},  #one teo three是列,a,b.c,d是行
            'two': {'a': 5, 'b': 6, 'c': 7, 'd': 8},
            'three': {'a': 9, 'b': 10, 'c': 11, 'd': 12}}
    print("dic3:\n%s"%dic3)
    df3=pd.DataFrame(dic3)
    print("df3:\n%s"%df3)
    print(type(df3))
 '''

    '''
    DataFrame(2)通过数据框创建数据框、
    
    
    df4=df3[['one','three']]
    print("df4:\n%s"%df4)
    s3=df3['one']
    print("s3:\n%s"%s3)
    '''

    '''
    数据索引:(1)通过数据索引获取值
    s4 = pd.Series(np.array([1, 1, 2, 3, 5, 8]))
    print("s4:\n%s"%s4)
    print("s4的索引:\n%s"%s4.index)
    s4.index=['a','b','c','d','e','f']
    print("s4的索引:\n%s" % s4.index)
    print("s4[4]:%s"%s4[4]+"\n") #这样也可以换行,字符串拼接
    print("s4['c']:%s" % s4['c'] + "\n")
    print("s4[:4]:\n%s" % s4[:4] + "\n") #取前4个
    print("s4[4:]:\n%s" % s4[4:] + "\n") #从第五个开始取
    print("s4[b:e]:\n%s" % s4['b':'e'] + "\n")  # 从b到e包含b,e
    '''

    '''
    #数据索引:(2)自动化对齐
    #此处的s5和s6的索引是不一样的
    s5 = pd.Series(np.array([10, 15, 20, 30, 55, 80]))
    index=['a','b','c','d','e','f']  #此处可以不加s5.index,直接的index和s5.index效果一样
    #print("s5的索引:\n%s"%s5.index)
    s6= pd.Series(np.array([12,11,13,15,14,16]))
    index = ['a','c','g','b','d','f']
    #summ=s5+s6
    print("s5+s6:\n%s"%(s5+s6)) #自动对齐分别相加,结果:[22,26,33,45,69,96]
    print("s5/s6:\n%s"%(s5/s6))
     '''

    '''
    利用pandas查询数据
    '''
    inputfile = 'G:\PythonCode\PycharmProjects\data\soccer.xlsx'
    soccerData=pd.read_excel(inputfile)
    #print(soccerData)
    '''
     查询指定行:
     soccerData.head()默认为前5行,head()可以加参数,soccerData.head(6)为前6行
     soccerData.tail()默认为后5行,tail()可以加参数,soccerData.tail(6)为后六行
     print("查询前5行:\n%s"%soccerData.head())
     print("查询后5行:\n%s" % soccerData.tail())
    #通过ix索引标签查询指定的行
    print("查询0,2,4行:\n%s"%soccerData.ix[[0,2,4]])#这里的ix索引标签函数必须是中括号[]
    '''

    '''
    查询指定列 
    #print(soccerData['2006世界杯'].head(4))
    print(soccerData[['2006世界杯','2010世界杯']].head(3))#如果多个列的话,必须使用双重中括号   
    #通过ix索引查询指定列
    print(soccerData.ix[:,['2006世界杯','2010世界杯']].head(3))
    #通过ix索引查询指定的行列
    print(soccerData.ix[[0,3,5],['2006世界杯','2010世界杯']])
    print(soccerData['2006世界杯']==50) #此出输出的是布尔值,true和false
    print(soccerData[(soccerData['2006世界杯']==50) & (soccerData['2010世界杯']==50)]) #查询两列均为50的值
    print(soccerData[(soccerData['2006世界杯']==50) & (soccerData['2010世界杯']==50)][['2007亚洲杯','2006世界杯']])
     '''

    '''
    统计,主要是求均值,方差等等。此处没写公式 
    np.random.seed(1234) #每次产生一样的随机数
    d1=pd.Series(np.random.normal(size=10)) #产生正太分布
    d2=pd.Series(np.random.f(2,4,size=10))  #f分布
    d3=np.random.randint(1,10,size=10)      #随机整数
    # print(d1)
    # print("****")
    # print(d2)
    # print("****")
    # print(d3)
    df = pd.DataFrame(np.array([d1, d2, d3]).T, columns=['x1', 'x2', 'x3'])
    #print(df.head())
    # print(df.corr())  # pearson相关系数,默认的
    # print(df.corr('kendall'))  # Kendall Tau相关系数
    # print(df.corr('spearman'))  # spearman秩相关
    #print(soccerData['2006世界杯'].describe())  #统计离散变量的观测数、唯一值个数、众数水平及个数。只需要使用describe方法就可以实现这样的统计了。
    #print(df.corrwith(df['x1']))   #某一个变量与其余变量的相关系数的
    #print(df.cov())   #数值型变量间的协方差矩阵
    '''

    '''
    类似于SQL的操作
    
    s1={'name':['liu','wang'],
       'sex':['M','F'],
       'age':[27,33],
       'height':[165.7,167.2],
       'wight':[61,63]
       }
    s2 = {'name': ['daniel', 'tony'],
          'sex': ['M', 'F'],
          'age': [12, 13],
          'height': [156.7, 178.2],
          'wight': [66, 66]
          }

    student1=pd.DataFrame(s1)
    student2=pd.DataFrame(s2)
    # print(student1)
    # print(student2)
    student3=pd.concat([student1,student2],ignore_index=True) #将student2中的数据添加到student1中,concat函数可以自动对齐两个数据框的变量!
                                                              #ignore_index=True,重新排行号
    student3['score']=23 #增加一列,值都为23
    #student3.drop(0,axis=0,inplace=True) #这样会删除所有行号为0的行,
    #student3.drop('height',axis=1,inplace=True),#删除一列 height
    #student3.drop(['age','wight'],axis=1,inplace=True) # 删除多列: age,wight

    student3.ix[student3['name']=='tony','score']=98  #修改指定行列的值,就是修改原始记录

    #print(student3)

    #print(student3.groupby('sex').mean()) #groupby聚合, 根据sex列求均值
    #print(student3.groupby(['sex','name']).mean())
    #print(student3.drop('name',axis=1,inplace=True).groupby('sex').mean())#报错
    #print(student3.drop('age',axis=1).groupby('sex').agg([np.mean(),np.median()]))  #报错

    sx=pd.Series(np.array(np.random.randint(1,20,10)))
    #print(sx.sort_values()) #按值排序,默认升序
    #print(sx.sort_index())  #按索引排序
    #print(student3.sort_values(by='age')) #按年龄升序
    #print(student3.sort_values(by=['age','sex'])) #按年龄和性别,此处年龄和性别谁在前面首先按谁排序
    dic_score2={
        'name':['daniel','tony','liu','wang'],
        'score2':[83,84,np.nan,88], #此处有一个缺失值
        'score3':[np.nan,70,73,50],
        'score4':[90,92,94,np.nan]
    }
    score2=pd.DataFrame(dic_score2)
    #print("score2:\n%s"%score2)
    student4=pd.merge(student3,score2,on='name',how='right')
    #print(student4)#两个表联合
    #print(pd.isnull(score2)) #此处pd.isnull(score2)返回的是波尔类型的值,无法直接进行sum求和计算
    #print(score2.dropna()) #删除缺失值,dropna会删除任何含有缺失值的行
    #print(score2.dropna(how='all')) #只删除空行,就是这一个行的值都是nan
    #print(score2.fillna(0)) #用常量填补缺失值
    #print(score2.fillna(method='ffill')) #用前一个值填充,第一个前充不了,因为前面没有值
    #print(score2.fillna(method='bfill'))  # 用后一个值填充,最后一个填充不了

    #用均值或中位数填充各自的列
    score2_median=score2['score2'].median()
    #print(score2_median)
    score3_mean=score2['score3'].mean()
    score4_mean=score2['score4'].mean()
    scorex=score2.fillna({'score2':score2_median,
                   'score3':score3_mean,
                   'score4':score4_mean
    })
    #print("填充后的score2->scoreX:\n%s"%scorex)
    studentx = pd.merge(student3, scorex, on='name', how='right')
    print(studentx)
    '''

    '''
    数据透视表,类似与excel
   
    print(pd.pivot_table(studentx,values=['height'],columns=['sex']))
    print("*****")
    print(pd.pivot_table(studentx,values=['height','wight'],columns=['sex','age']).unstack()) #unstack():变成列联表
    print("* * * * *")
    print(pd.pivot_table(studentx,values=['height','wight'],columns=['sex'],aggfunc=[np.mean,np.median,np.std])) #此处的np.mean等函数不能写成np.mean()
     '''

    '''
    多层索引的使用
    '''
    np.random.seed(1234)
    dff=pd.DataFrame(np.random.randint(10,50,20).reshape(5,4),
                     index=[['A','A','A','B','B'],
                            [1,2,3,1,2]],
                     columns=[['X','X','X','Y'],
                              ['x1','x2','x3','y']])
    print(dff)
    print("* * * * * * ")
    print(dff['X']) #取出外层列索引为X的值,一大块数据
    print("* * * * * * ")
    print(dff.ix[['A'],:]) #取出外层行索引为A的值,一大块数据




if __name__ == "__main__":
    main()



  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值