• Python数据分析-Pandas


    Pandas

    个人笔迹,建议不看

    import pandas as pd
    import numpy as np
    
    • 1
    • 2

    Series类型

    s=pd.Series([135,np.nan,6,8],index=['a','b','c','d','e'])
    print(s) # 默认0-n-1,否则用index数组作行标
    s.index
    s.value # array()
    s['a'] => 1 # 取值 
    s[0:3]		# 切片
    s[::2] # 其实跟 array 类似,就是输出不一样
    # 索引赋值
    s.index.name = '索引'
    s.index = list('abcdef');
    s['a':'c']; # 切片左闭右闭
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    DataFrame类型

    是一个二维结构,类似于一张excel

    1)构造时间序列
    date = pd.date_range('20180101',periods=6)
    print(date)
    2)创建一个DataFrame结构
    ## 传入二维数组
    df = pd.DateFrame(np.random.randn(6,4))
    df = pd.DateFrame(np.random.randn(6,4),index = date, columns=list('ABCD'))
    ## 用字典创建
    df2 = pd.DataFrame({'A':1.,'B':pd.Timestamp('20181001'),'C':pd.Series(1,index=list(range(4)),dtype = float),'D':np.array([3]*4,dtype=float),'E':
    pd.Categorical(['test','train','test','train']),'F':abc});
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    DateFrame只要求每列的数据类型相同就可以了

    • 查看数据
    df.head() # 默认产生前五行
    df.tail(3) 
    df2.dtypes # 查看各列的数据类型
    ## 下标用index属性查看
    df.index
    df.columns
    df.values # 只看值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 读取数据及数据操作
    # 读取excel,同一目录下
    df=pd.read_excel('name.xlsx')
    df=pd.read_csv('name.csv')
    df=pd.read_excel(r'C:\Users\Administrator\Desktop\name.xlsx') # r 代表不需要转义
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 行操作
    # iloc的参数为具体的数字行列号,loc的参数为设置的index值和列名
    df.iloc[0] 看第0行
    df.iloc[0:5] # 左闭右开,df.loc[0:4].左闭右闭
    ## 添加一行
    ##先定义Series
    dit={'名字':'复仇者联盟3','投票人数':123456,'类型':'剧情','产地':'美国',上映时间':'2018-05-04'}
    s=pd.Series(dit)
    s.name = 38737
    df = df.append(s);
    df[-5:]# 查看后5行
    df[0:2]
    ## 删除行
    df=df.drop([0,1,2])  # 给的是索引
    ## 查看
    df['columnName'] # 显示名字这一列的所有信息
    df['columnName'][:5]# 先取系列,后取下标
    ## 增加字段
    df['newCol'] = range(1,len(df)+1)
    ## 删除列
    df = df.drop('序号',axis=1) 
    ## 通过标签进行数据选择, 先行后列用loc
    df.loc[[index],[column]]
    df.loc['a','名字']
    df.loc[[1,3,5,7,9],['名字','评分']]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 条件选择
    df['产地'] == '美国' # bool series
    df[df['产地'] == '美国'][:5]
    ## 选取产地为美国并且评分大于9
    df[(df.产地=='美国')&(df.评分>9)][:5]
    ## 产地为美国或中国并且评分大于9
    df[((df.产地=='美国')|(df.产地=='中国'))&(df.评分>9)] # 其实是位运算,注意加括号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 缺失值及异常值处理
    dropna
    fillna
    isnull
    notnull
    
    • 1
    • 2
    • 3
    • 4

    判断缺失值:

    df.isnull()
    返回二维bool数组
    df['名字'].isnull()
    df.col.notnull()
    df[df.col.isnull][:5]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    填充缺失值

    fillna()	# NaN
    df['评分'].fillna(value)
    
    • 1
    • 2

    删除缺失值

    df.dropna() 
    参数:
    how = 'all' : 某行某列全为0时删除
    inplace = true : 覆盖掉原先的数据,即直接变为新数据
    axis=0:选择行或者列
    
    • 1
    • 2
    • 3
    • 4
    • 5

    练习

    import pandas as pd
    data = pd.read_excel('豆瓣电影数据.xlsx')
    print(type(data))
    
    • 1
    • 2
    • 3
    
    
    • 1
    data.to_excel(r'C:/Users/xxx/desktop/movie.xlsx')
    
    • 1
    df = pd.DataFrame({'name':['zs','ls'],'age':[1,2]})
    df
    df.describe()
    #type(df)
    
    • 1
    • 2
    • 3
    • 4
    age
    count2.000000
    mean1.500000
    std0.707107
    min1.000000
    25%1.250000
    50%1.500000
    75%1.750000
    max2.000000
    data.columns
    
    • 1
    Index(['Unnamed: 0', '名字', '投票人数', '类型', '产地', '上映时间', '时长', '年代', '评分',
           '首映地点'],
          dtype='object')
    
    • 1
    • 2
    • 3
    df = pd.read_excel(r'C:/Users/xxx/desktop/附件.xlsx')
    df.drop(['Unnamed: 15','Unnamed: 16'],axis = 1)
    df.drop(df.columns[15:22],axis=1,inplace = True)
    df.to_excel(r'C:/Users/xxx/desktop/test.xlsx')
    df.fillna(df.mean())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    编号母亲年龄婚姻状况教育程度妊娠时间(周数)分娩方式CBTSEPDSHADS婴儿行为特征婴儿性别婴儿年龄(月)整晚睡眠时间(时:分:秒)睡醒次数入睡方式
    01342537.013139中等型1110:00:003.0000002.000000
    12332542.01003安静型2311:00:000.0000004.000000
    23372541.01489安静型1112:00:001.0000002.000000
    34312537.5161613安静型2311:00:002.0000001.000000
    45361540.01133中等型2310:30:001.0000004.000000
    ................................................
    405406312339.51144NaN22NaN1.4615383.025641
    406407262237.014914NaN22NaN1.4615383.025641
    407408262539.01033NaN11NaN1.4615383.025641
    408409272541.21004NaN11NaN1.4615383.025641
    409410312538.01377NaN22NaN1.4615383.025641

    410 rows × 15 columns

    df[df.婴儿行为特征 == '安静型']
    
    • 1
    编号母亲年龄婚姻状况教育程度妊娠时间(周数)分娩方式CBTSEPDSHADS婴儿行为特征婴儿性别婴儿年龄(月)整晚睡眠时间(时:分:秒)睡醒次数入睡方式
    12332542.01003安静型2311:00:000.04.0
    23372541.01489安静型1112:00:001.02.0
    34312537.5161613安静型2311:00:002.01.0
    56322541.01123安静型1112:00:000.04.0
    910341337.213510安静型1311:00:000.04.0
    ................................................
    377378292441.01679安静型2211:00:001.04.0
    378379412339.41101311安静型1110:00:000.04.0
    380381322540.01553安静型1109:00:000.05.0
    387388312541.61031安静型1110:30:002.01.0
    388389272340.011105安静型1106:00:002.01.0

    120 rows × 15 columns

    import numpy as np
    
    • 1
    d = dict(A = np.array([1,2]),B =np.array([1,2,3,4]))
    
    • 1
    df1 = pd.DataFrame({'name':['zs','ls'],'age':[1,2]})
    df2 = pd.DataFrame({'mane':['ww','ll'],'sex':[0,1]})
    pd.concat([df1,df2])
    
    • 1
    • 2
    • 3
    nameagemanesex
    0zs1.0NaNNaN
    1ls2.0NaNNaN
    0NaNNaNww0.0
    1NaNNaNll1.0
    df1 = pd.DataFrame({'name':['zs','ls'],'age':[1,2]})
    df2 = pd.DataFrame({'name':['ww','ll'],'age':[0,1]})
    df3 = pd.concat([df1,df2])
    df3['age+1'] =df3['age'] + 1
    df3.dtypes
    df3
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    nameageage+1
    0zs12
    1ls23
    0ww01
    1ll12
    df2.size # 面积 4 * 3
    df.shape
    df.var()
    # df.discribe()
    df.std()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    编号          118.501055
    母亲年龄          4.362262
    婚姻状况          0.359970
    教育程度          1.001642
    妊娠时间(周数)      1.900777
    分娩方式          0.109890
    CBTS          4.963365
    EPDS          6.757595
    HADS          4.259715
    婴儿性别          0.500319
    婴儿年龄(月)       0.821911
    睡醒次数          1.612071
    入睡方式          1.408516
    dtype: float64
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    深入浅出排序算法之堆排序
    力扣-226.翻转二叉树
    Go vs Rust:文件上传性能比较
    第四篇章:运行时数据区——共享空间
    vue3项目 Element-Plus DatePicker日期选择器组件限制只能选择7天内
    程序员都不知道的代码
    开发GD32遇到的坑B点
    场景实验室x场景品牌:三翼鸟正在替代产品带动增长
    RabbitMQ入门
    Jmeter-记一次自动化造数引发的BeanShell写入excel实例
  • 原文地址:https://blog.csdn.net/qq_61832249/article/details/132689409