python 数据分析 - pandas

pandas 常用功能

官网地址
pandas 由三部分组成Series(一维),DataFrame(二维),Panel(三维以上数组)


   
    import pandas as pd
    import numpy as np
    
    
    # 新建 	里面可以是列表也可以是字典
    pd.Series([1,3,5,7,None],index=list('abcde'))
    pd.DataFrame({'a': [1,2,3], 'b': [2,3,4], 'c':[3,4,5]})
    # 增加一列的话的方法和使用字典一样   a['s'] = 1
    # 字典情况下 键是作为列名存在
    pd.date_range('2000.1.1', periods=5)  # 自动向后延时5天
    pd.DataFrame([
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ], index=list('abc'), columns=list('ABC'))
    # 指定行索引				指定列索引
    a[a.Sex.isin(['male'])]  # a数据中,Sex中是mela的索引出来
    
    # 其他读取文件方式类似
    print(a.head())  # 前5行可以指定
    print(a.tail())  # 最后5行可以指定
    print(a.describe())  # 描数信息
    print(a.index)  # 下标相关信息
    print(a.columns)  # 列名
    print(a.values)  # 获取到值
    print(a.sort_index(ascending=False))  # 下标排序 可以指定降序 level=0或者1可以用下标排序
    print(a.sort_values('DATE', ascending=False))  # 值排序 
    print(a.info())  # 获取数据基本信息
    print(a.shape)  # 获取行和列的大小值
    print(a.count())  # 非Na值的数量
    print(a.ndim)  # 列数
    print(a.size)  # 获取元素个数
    print(a.ravel())  # 拉平数组
    print(a.duplicated())  # 判断是否重复
    
    # 删除
    a.drop()  # 删除
    a.drop_duplicates()  # 删除重复的值  第一个参数为可选参数[]
    
    # 层次化结构相关
    a.reset_index()  # 转换为DataFrame对象  可以去除索引
    a.set_index()  # 把某一列变成索引  加上drop=False属性可以保留数据不被删除
    a.swaplevel(0,1,axis=1)  # 第一行索引和第二行的索引交换 默认为列
    a.swapaxes(0,1)  # 类似于 a.T
    
    # 替换相关
    a.replace('需要替换的值''要替换的值')  # 可以为列表
    a.reindex(a, b)   # 替换
    
    # 在某个范围之间 
    pd.cut('拆分谁', '拆分多少份')  # 得到数据属于哪一个范围
    ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
    s = pd.cut(ages,[18,25,35,60,100])
    s.value_counts()
    
    a.map(b)  # 映射  a应该是个Serier对象  b需要的是一个字典
    # map  实例
    a = pd.Series(['张','三','丰','李','四','赵','六'])
    b = {'张': 124,'三':142,'丰':531,'李':743,'四':351,'赵':1351,'六':42}
    a.map(b)
    
    0     124
    1     142
    2     531
    3     743
    4     351
    5    1351
    6      42
    dtype: int64
    
    # 索引
    a.iloc[0,0]  # 索引位置 (行,列)
    a.loc['a', 'A']  # 索引标签 (行标签,列标签)
    a.loc['条件','列'] = '值'  # loc条件索引
    a.iat[0,0]  # 索引位置 只能索引一个(行,列)
    
    # 空值处理
    pd.isna(a)  # 判断是否是空值
    a.dropna()  # 删除行中带有NaN的空值  需重新赋值
    a.fillna(0)  # 替换所有的空值为0  需要重新赋值
    
    # 日期
    pd.to_datetime('日期列')
    
    # 拼接 连接 级联   # 重名列保存指定suffixes=('_左','_右')属性
    A.merge(B,left_on='key',right_index=True)
    # 连接时可以指定left_index=True,right_index=True属性,把索引作为值对待
    pd.concat([a,b], 1, sort=True,  # 类似于numpy中的vstack,hstack 默认按列 1是行 
              ignore_index=True)    # 继续编号
    A.merge(B,how='left',on='id')  # 左连接  只取左边有的数据以及和右边相同的数据补左
    A.merge(B,how='outer',on='id')  # 外连接  全部数据
    A.merge(B,on='id')  # 默认内连接  只取两边都有的
    A.merge(B,left_on='e',right_on='k',how='outer')  # 不同列名连接
    
    A.stack()   # 列变行  
    A.unstack()  # 行变列
    A.combine_first(B)  # 打补丁,用B中的值填充A的缺省值,多余的值移交A
    
    # 数据向下移		原数据用空值代替
    a.shift()  # 默认移动1个单位可以指定
    
    # 每一个 数向前一个比较 得出增加比例
    a.pct_change()  # 如2比3计算3-2/2结果为0.5
    (a > 0).all()  # 按列计算a里面全部比0大的为True
    (a > 0).any().any  # 每一列有一个成立,结果为True
    
    a.apply(fun)  # 可以调用函数
    a.value_counts()  # 可以统计每个单位出现的次数 (只能用于Series)
    # DataFrame 可以这样用 a.a.value_count() 或者 a['a'].value_count()
    a.str.contains('q')  # 调用str方法 可以是str的任何方法 
    # 这里是判断里面是否存在q
    
    # 分组
    stu = pd.DataFrame({
        'name': ['张三', '李四', '王五', '小六'],
        'sex': ['N', 'N', 'N', 'V'],
        'age': [12, 25, 24, 22],
        'job': ['H5', 'BD', 'AI', 'AI']
    })
    stu.groupby('sex').groups  # 显示分组后的结果
    stu.groupby('sex').get_group('N')  # 显示分组后的N详细信息
    stu.groupby('sex').agg(np.mean)  # 分组后调用函数	可以自定义函数
    stu.groupby('job').agg([np.mean,np.max,np.min]) # 分组后计算平均年龄,最大年龄,最小年龄
    stu.groupby(['job', 'sex']).count()  # 可以进行多列分组 并统计个数
    stu.groupby('age').filter(lambda x: x['age'] >25) # 过滤年龄
    """	age
    	mean	amax	amin
    job			
    AI	23	24	22
    BD	25	25	25
    H5	12	12	12"""
    a['a'].astype('category')  # 重复的忽略,只查看一个
    
    # 数据透视表  
    # 参数:data数据, values=统计列名, index=分组列名, columns=指定列, aggfunc='mean'函数列表
    a = pd.read_csv('UNRATE.csv')
    pd.pivot_table(a, index=['DATE'], values=['VALUE'], aggfunc=[np.sum])
    a.pivot_table(['VALUE'], ['DATA'], aggfunc=[np.max])  # 也可以这样
    
    
    # 汇总
    a.sum()  # 合计  axis同numpy  level=0 指定某一个索引求和
    a.std()  # 标准差
    a.var()  # 方差
    a.cumsum()  # 累计
    a.mix()  # 最小值
    a.max()  # 最大值
    a.mean()  # 平均值
    a.median()  # 中位数
    a.cov()  # 协方差
    a.idxmin()  # 索引最小值  获取坐标
    a.idxmin()  # 索引最大值
    
    # eq(相等), ne(不相等), lt(小于), gt(大于), le(小于或等于)

读写文件

    # 读取csv文件 支持更多操作
    a = pd.read_csv('UNRATE.csv')   # 读取数据 任何url
    # 参数 header=None 去掉标题,skiprows=[0,2]指定行读取(=1可以跳过第一行), sep='分隔符', nrows=5只显示5行
    # names=['标题'] 列名, index_col=['列名变索引'], na_values=['空值补充']
    # chunksize=2  # 块大小,设置了此属性会返回一个可迭代对象,可以用next()读取
    pd.read_html('网址')  # 读取该网址里面的table表格,返回列表
    pd.read_json('json格式数据')  
    pd.read_excel('文件名','表名')
    # 5、HDF5数据
    df=pd.HDFStore("test.h5") #创建
    df['ff']=pd.DataFrame([
        [1,2,3,4,5],
        [6,7,8,9,10]
    ])#写入数据,hdf中的数据是一个键值对形式
    df['ff'] 读取数据
    
    # 6、sqlite操作:
    import  sqlite3  #导入
    conn=sqlite3.connect("student2")#新建连接
    x=conn.execute("select  * from  student ")#执行操作
    x.fetchall()#获取所有数据
    conn.close()关闭连接
    
    
    # 写csv文件
    a.to_csv('123.csv',sep='分隔符', columns=['要保存的列名'],
             header=False('标题'),index=False('下标'))  # 保存数据
    pd.options.display.max_rows=20  # 设置显示20个数据前10+后10
    
    sys.stdout   # 系统输出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值