zoukankan      html  css  js  c++  java
  • pandas

    numpy像序列,

    pandas更像字典形式的numpy

    import pandas as pd
    一般搭配np一起练习
    np.nan 什么都没有
    s = pd.Series([1,3,6, np.nan, 44, 1])
    print(s) : xxx dtype:float64

    dates = pd.date_range('20160101', periodes = 6)
    df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=['a','b','c','d'])
    会用dates来做行标
    df1 = pd.DataFrame(np.arange(12).reshape((3,4)))
    行标是默认的0,1,2,3,4.....

    df2 = pd.DataFrame({ '用字典代替' })
    df2.dtypes float64, float32, int32, category, object, datetime64等
    df2.index

    df2.describe() 显示数据各种属性,比如大小平均百分比分布等
    df2.T 转置
    df.sort_index(axis=1, asending=False) 按index索引标进行排序, 对列的名称排序, 以倒序排列

    df2.sort_values(by='E') 按单行的值进行排序

    pandas数据选择....................................................................................


    index是行标
    columns 是列表

    DataFrame({}) 字典导入, 字典关键字是列标

    dates = pd.date_range('20130101', periods=6, freq='M') M按月,D按日

    dates = pd.date_range('20130101', periods=6)
    df = pd.DateFrame(np.arange(24).reshape((6,4)), index=dates, columns=['A','B','C','D'])

    df['A']
    df.A 和上面一样的效果 选A列
    df[0:3]
    df['20130102':'20130104'] 和上面一样, 按行标和按顺序
    #select by label: loc
    df.loc['20130102'] 以标签名选
    df.loc[ : , ['A','B']) 选A,B行的数据
    df.loc[ '20130102' , ['A','B']) 选A,B行 '20130102下的的数据

    #select by position: iloc
    df.iloc[3] 第3行的数据
    df.iloc[3,1] 第3行第1位的数据
    df.iloc[3:5, 1:3] 第3行到5行, 1列到3列的数据
    df.iloc[[1,4,5],1:3] 第1,4,5个位置

    #mixed selection: ix (位置和标签混合)
    df.ix[:3, ['A','C']] 0到3行,A,C列

    Boolean indexing: 是或者否的筛选
    df[df.A>8] A列大于8的部分


    pandas 赋值................................................................................................................
    dates = pd.date_range('20130101', periods=6)
    df = pd.DateFrame(np.arange(24).reshape((6,4)), index=dates, columns=['A','B','C','D'])

    df.iloc[2,2] = 111 给2行2列的值赋值
    df.loc['20130101', 'B'] = 222
    df.ix [ '20130101', 2] = 333
    df[df.A>0] = 0 A大于0的全部改为0
    df.A[df.A>4] = 0 A大于0的A列全部改为0
    df['F'] = np.nan F列全等于N#A
    df['E'] = pd.Series([1,2,3,4,5,6], index = pd.date_range('20130101',periods=6))


    pandas处理数据丢失...................................................................................................
    dates = pd.date_range('20130101', periods=6)
    df = pd.DateFrame(np.arange(24).reshape((6,4)), index=dates, columns=['A','B','C','D'])

    虚拟丢失数据:
    df.iloc[0,1] = np.nan
    df.iloc[1,2] = np.nan

    df.dropna(axis=0, how='any')) #任何一个是non才会丢, how={'any','all'} #all全部是non才丢
    掉这行. axis=1 丢掉列
    df.fillna(value=0) non的值全部设置成0.
    df.isnull() 检查全部位置是否位Non,
    np.any(df.isnull())==True) 里头只要有一个丢失就是true


    pandas 导入导出...............................................................................................................
    read_csv, read_excel, read_pickle , .......
    to_csv, .........


    data = pd.read_csv('student.csv')
    参数: sep 分割符(当txt的时候比如分割用逗号 , read_csv可以读txt


    data.to_pickle('student.pickle')

    pandas合并Series.......................................................................................................................
    contatenating
    axis=1左右合并 (axis=0上下合并)

    df1 = pd.DateFrame(np.ones((3,4))*0, columns=['a','b','c','d'])
    df2 = pd.DateFrame(np.ones((3,4))*1, columns=['a','b','c','d'])
    df3 = pd.DateFrame(np.ones((3,4))*2, columns=['a','b','c','d'])

    res = pd.concat([df1, df2, df3], axis=0) 竖向合并, axis=1横向合并 , 合并后行标不变, 比如0,1,2,0,1,2,0,1,2
    res = pd.concat([df1, df2, df3], axis=0, ignore_index=True) 合并后行标重新设置,忽略原来的

    #join, ['inner', 'outer']
    df1 = pd.DateFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3])
    df2 = pd.DateFrame(np.ones((3,4))*1, columns=['b','c','d','e'], index=[2,3,4])
    行和列部分重合

    res = pd.concat([df1, df2]) 互相补全, 没有的部分用non填充(df2没有a列,全non).这是默认的outer
    res = pd.concat([df1, df2], join='outer') 同上
    res = pd.concat([df1, df2], join='inner') 裁剪, 都有的列部分, 不裁剪行,只裁剪列.
    res = pd.concat([df1, df2], join='inner', ignore_index=True) 重新设置行号

    res = pd.concat([df1,df2], axis=1) axis=1左右合并 (axis=0上下合并)
    左右合并, 全部考虑,行号全加上. 没有的行的用Non

    res = pd.concat([df1,df2], axis=1, join_axes=[df1.index]) axis=1左右合并 (axis=0上下合并)
    左右合并,
    给定index后(join_axes=[df1.index]),以给定的index合并.


    append -----------------------------
    res = df1.append(df2, ignore_index=True) 把2组数据附加到1上
    res = df1.append([df2,df3], ignore_index=True) 加多个.
    res = df1.append([df2,df3]) index不处理.

    s1 = pd.Series([1,2,3,4], index=['a','b','c','d'])
    后续有数据s1不停的添加到df1, series是子集.
    res = df1.append(s1, ignore_index=True)

    pandas合并DataFrame ................................................................................
    1个key合并, '可能用在数据库.
    left = pd.DataFrame(
    {'key':[k0,k1,k2,k3],
    'A':[A0,A1,A2,A3],
    'B':[B0,B1,B2,B3]}
    )
    right = pd.DataFrame(
    {'key':[k0,k1,k2,k3],
    'C':[C0,C1,C2,C3],
    'D':[D0,D1,D2,D3]}
    )

    res = pd.merge(left, right, on='key') 以key column合并, 同个key值在同一行.
    以上可能用在数据库.

    left = pd.DataFrame(
    {'key1':[k0,k1,k2,k3],
    'key2':[k0,k1,k2,k3],
    'B':[B0,B1,B2,B3]}
    )
    right = pd.DataFrame(
    {'key':[k0,k1,k2,k3],
    'key2':[k0,k1,k2,C3],
    'D':[D0,D1,D2,D3]}
    )

    res = pd.merge(left, right, on=['key1', 'key2']) 默认的是inner, 相同的部分合并.同时满足key1, key2相等(2个条件), 同时有多个条件符合, 缺失的部分复制顺推 how='inner'
    how=['left','right','inner','outer']
    outer: 不管是否一样都复制合并, 缺失的部分位Non
    left, right: 左边合并或者右边合并. 缺失的有数据的顺带复制,没有的位Non

    indicator, give the indicator a custom name ,显示合并的方式 left_only, both, right_only
    indicator=True 默认_merge / indicator= 'Indicator Column' 列标直接指定


    pandas 可视化matplotlib...............................................................................................................
    import matplotlib.pyplot as plt
    data = pd.Series(np.random.randn(1000),index=np.arange(1000))
    data = data.cumsum() #进行累加
    data.plot()
    plt.plot(x=, y= , ) 一般设置,这里不用因为已经默认有了pandas
    plt.show()

    data = pd.DataFrame(np.random.randn(1000,4), index=np.arange(1000), columns=list('abcd'))
    data.head(5) 前5个数据先看看.
    data = data.cumsum()
    data.plot()
    plt.show()

    或者
    plot methods:
    bar 条形图
    hist
    box
    kde
    area
    scatter 散点分布图
    hexbin
    pie
    ...
    ...

    aix = data.plot.scatter(x='A',y='B', color='DarkBlue', label='Class1')
    data.plot.scatter(x='A',y='C',color='DarkGreen',label='Class2', ax=aix)

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    import pandas as pd

    file = pd.read_csv('NIN411PF.CSV', encoding='ANSI')
    title = file.columns
    print(title)

  • 相关阅读:
    PostMan-NewMan运行参数
    shell脚本学习简单记录笔记
    android开发okhttp-4.9.1源码大致流程解读
    android开发获取键盘高度以及判断键盘是否显示(兼容分屏模式)
    Android开发The style on this component requires your app theme to be Theme.AppCompat (or a descendant)的解决方法
    Linux开发Ubuntu安装man手册
    Android开发源码解读四大组件源码解读简单梳理
    Android开发涉及到的AMS类和ActivityThread类源码解读
    Android开发为什么主线程可以一直运行而不会退出来
    前端CryptoJS加密、后端解密代码实现参考
  • 原文地址:https://www.cnblogs.com/pythonClub/p/10398995.html
Copyright © 2011-2022 走看看