zoukankan      html  css  js  c++  java
  • pandas使用

    pandas简介

    1、pandas是一个强大的Python数据分析的工具包。
    2、pandas是基于NumPy构建的。

    3、pandas的主要功能

    • 具备对其功能的数据结构DataFrame、Series
    • 集成时间序列功能
    • 提供丰富的数学运算和操作
    • 灵活处理缺失数据

    4、安装方法:pip install pandas
    5、引用方法:import pandas as pd

    Pandas之Series

    series是一种一维数据结构,每一个元素都带有一个索引,与一维数组的含义相似,其中索引可以为数字或字符串。

    创建

    import pandas as pd
    import numpy as np
    
    pd.Series([1, 2, 3, 4])
    pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
    pd.Series({'a': 1, 'b': 2})
    pd.Series(np.arange(5))

    Series常用特性

    In [8]: sr = pd.Series([1, 2, 3, 4])
    
    In [9]: sr*2
    Out[9]:
    0    2
    1    4
    2    6
    3    8
    dtype: int64
    
    In [10]: sr[sr>1] #布尔运算
    Out[10]:
    1    2
    2    3
    3    4
    dtype: int64
    
    In [11]: 3 in sr
    Out[11]: True
    
    In [12]: sr.sum() #求和
    Out[12]: 10
    
    In [13]: sr.mean() #求平均数
    Out[13]: 2.5
    
    In [14]: sr.index
    Out[14]: RangeIndex(start=0, stop=4, step=1)
    
    In [15]: sr.index=['a','b','c','d']
    
    In [16]: sr
    Out[16]:
    a    1
    b    2
    c    3
    d    4
    dtype: int64
    
    In [17]: sr.index #索引
    Out[17]: Index(['a', 'b', 'c', 'd'], dtype='object')
    
    In [18]: sr.values #值
    Out[18]: array([1, 2, 3, 4], dtype=int64)
    
    In [19]: sr.head() #前5列
    Out[19]:
    a    1
    b    2
    c    3
    d    4
    dtype: int64

     标签索引

    loc——通过行标签索引行数据 
    iloc——通过行号索引行数据 
    ix——通过行标签或者行号索引行数据(基于loc和iloc 的混合) 

    In [20]: sr = pd.Series({'a': 1, 'b': 2})
    
    In [21]: sr.loc['a']
    Out[21]: 1
    
    In [22]: sr.iloc[1]
    Out[22]: 2
    
    In [23]: sr.ix['b']
    Out[23]: 2
    
    In [24]: sr.ix[0]
    Out[24]: 1

    Series数据对齐

    pandas在运算时,会按索引进行对齐然后计算。如果存在不同的索引,则结果的索引是两个操作数索引的并集。
    s1 = pd.Series([12, 23, 34], index=['c', 'a', 'd'])
    s2 = pd.Series([11, 20, 10], index=['d', 'c', 'a'])
    print(s1 + s2)  # 按索引相加
    
    s2 = pd.Series([11, 20, 10], index=['b', 'c', 'a'])
    print(s1 + s2)  # 按索引相加,出现Nan值
    
    在两个Series对象相加时将缺失值设为0
    s1.add(s2, fill_value=0)

    缺失数据处理

    print(sr.isnull())  # 等于NaN是True
    print(sr.notnull())  # 不等于NaN是True
    print(sr[sr.notnull()])  # 过滤空值
    print(sr.dropna())  # 过滤空值
    print(sr.fillna(0))  # 填充空值

     

     Pandas之DataFrame

    DataFrame是一个表格型的数据结构,含有一组有序的列。
    DataFrame可以被看做是由Series组成的字典,并且共用一个索引

     

    创建方式及常用属性

    data = [[1, 2, 3], [4, 5, 6]]
    index = ['x', 'y']
    columns = ['a', 'b', 'c']
    df = pd.DataFrame(data=data, index=index, columns=columns)
    
    print(df.loc['x'])  # 指向x索引的行
    print(df.iloc[1])  # 指向第二行
    print(df.loc['x', 'a'])  # 指向x索引的行,a列
    print(df.loc['x', ])  # 指向x索引的行,所有列
    
    print(df.index)  # 行索引
    print(df.columns)  # 列索引
    print(df.T)  # 转置
    print(df.values)  # 值(二维数组)
    print(df.describe())   # 每列的统计信息

     

     数据对齐与缺失数据

    DataFrame对象在运算时,同样会进行数据对齐,行索引与列索引分别对齐。
    结果的行索引与列索引分别为两个操作数的行索引与列索引的并集。

    DataFrame处理缺失数据的相关方法:

      • dropna(axis=0,where=‘any’,…) 过滤掉值为NaN的行
      • fillna() 填充缺失数据
      • isnull() 返回布尔数组,缺失值对应为True
      • notnull() 返回布尔数组,缺失值对应为False
    df = pd.DataFrame({'one': ['1', '2', np.NAN], 'two': ['a', np.NAN, np.NAN]})
    print(df.fillna('0'))  # 填充所有带有空的元素
    print(df.dropna())  # 删除所有带有空的行
    print(df.dropna(how='all'))  # 删除所有每列都有空的行
    df.loc[2, 'one'] = '3'  # 修改值
    print(df)
    print(df.dropna(axis=1))  # 删除为空值的列

    pandas:常用方法 

    - mean        #求平均值
    - sum         #求和
    - sort_index  #按行或列索引排序
    - sort_values  #按值排序
    - apply(func,axis=0)  #axis=0指的是逐行,axis=1指的是逐列。
            df.apply(lamada x:x.mean())  #按列求平均
            df.apply(lamada x:x['high']+x["low"])/2,axis=1)  #按列求平均(最高价和最低价的平均)
            df.apply(lamada x:x['high']+x["low"])/2,axis=1)  #按列求平均(最高价和最低价的平均)
    - applymap(func) #将函数应用在DataFrame各个元素上
    - map(func) #将函数应用在Series各个元素上

    举例:

    df = pd.DataFrame({'one':[1,2,3],'two':[4,5,6],'three':[7,8,9]} ,index=['a','b','c'] )
    print(df.mean()) # 按列求平均值
    # one      2.0
    # two      5.0
    # three    8.0
    print(df.mean(axis=1)) # 按行求平均值
    # a    4.0
    # b    5.0
    # c    6.0
    
    print(df.sum()) # 求和
    # one       6
    # two      15
    # three    24
    print(df.sort_values(by='two')) # 值排序
    print(df.sort_values(by='two',ascending=False)) # 值排序(倒序)
    print(df.sort_values(by='a',ascending=False,axis=1))  # 按行值排序(倒序)
    
    print(df.sort_index()) # 索引值排序
    print(df.sort_index(ascending=False)) # 索引值排序(倒序)
    print(df.sort_index(ascending=False,axis=1))  # 按行索引值排序(倒序)

     

     时间对象处理

    Python标准库:datetime
        datetime.datetime.timedelta  # 表示 时间间隔
        dt.strftime() #f:format吧时间对象格式化成字符串
        strptime()  #把字符串解析成时间对象p:parse
        灵活处理时间对象:dateutil包
            dateutil.parser.parse('2019/1/29') 
        处理时间对象:pandas
            pd.to_datetime(['2011-01-01', '2012-02-02'])
    
    产生时间对象数组:date_range start 开始时间 end 结束时间 periods 时间长度 freq 时间频率,默认为
    'D',可选H(our),W(eek),B(usiness),S(emi-)M(onth),(min)T(es), S(econd), A(year),… 1、时间序列就是以时间对象为索引的Series或DataFrame。 2、datetime对象作为索引时是存储在DatetimeIndex对象中的。 3、时间序列特殊功能: 传入“年”或“年月”作为切片方式 传入日期范围作为切片方式 丰富的函数支持:resample(), strftime(), …… 批量转换为datetime对象:to_pydatetime()

    举例

    # 转换时间对象
    print(pd.to_datetime(['2001-01-01','2001-Feb-21']))
    # 生成时间序列
    print(pd.date_range('2010-01-01','2011-01-01'))
    print(pd.date_range('2010-01-01',periods=10))
    print(pd.date_range('2010-01-01',periods=10,freq='H'))  # 按小时
    print(pd.date_range('2010-01-01',periods=10,freq='W')) # 按周
    print(pd.date_range('2010-01-01',periods=10,freq='W-MON')) # 按周一
    print(pd.date_range('2019-09-01',periods=30,freq='B')) # 按工作日
    
    sr = pd.Series(np.arange(100),index=pd.date_range('2018-01-01',periods=100))
    print(sr.index)
    print(sr['2018-04'])
    print(sr['2018-03-01':'2018-03-15'])
    print(sr.resample('M').sum())

     

    读取文件

    read_csv  读取csv文件

    read_excel 读取excel文件

    读取文件函数主要参数:

    • sep 指定分隔符,可用正则表达式如's+'
    • header=None 指定文件无列名
    • name 指定列名
    • index_col 指定某列作为索引
    • skip_row 指定跳过某些行
    • na_values 指定某些字符串表示缺失值
    • parse_dates 指定某些列是否被解析为日期,布尔值或列表
    print(pd.read_csv('600519.csv',index_col=0)) # 用第1列做索引
    
    print(pd.read_csv('600519.csv',index_col='date'))  # 用date列做索引
    
    pd_csv = pd.read_csv('600519.csv',index_col='date',parse_dates=['date'])  # 用date列做索引, 并转化为datetime类型
    print(pd_csv.index)
    df.rename(column={0:'a',1:"b"})  #修改列名
    print(pd.read_csv('600519.csv',header=None, names=list('abcdefgh')))  # 指定列名
    
    pd.read_csv('600519.csv',header=None, na_values=['None'])  # 指定字符串None为Nan

    写入文件

    1、写入到文件:

    • to_csv

    2、写入文件函数的主要参数:

    • sep
    • na_rep 指定缺失值转换的字符串,默认为空字符串
    • header=False 不输出列名一行
    • index=False 不输出行索引一列
    • cols 指定输出的列,传入列表

    3、其他文件类型:json, XML, HTML, 数据库

  • 相关阅读:
    linux 内核防火墙配置规则
    postfix 配置邮件服务器
    JDK 和 tomcat 安装 配置
    ifstat-网络接口监测工具
    一个比较通用的Makefile
    [转]vim常用命令
    [转]Valgrind简单用法
    [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)
    [转]Reed Solomon纠删码
    [转]分布式文件系统FastDFS架构剖析
  • 原文地址:https://www.cnblogs.com/xiao-apple36/p/11534698.html
Copyright © 2011-2022 走看看