zoukankan      html  css  js  c++  java
  • python pandas ---Series,DataFrame 创建方法,操作运算操作(赋值,sort,get,del,pop,insert,+,-,*,/)

    pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包
    pandas 也是围绕着 Series 和 DataFrame 两个核心数据结构展开的,

    导入如下:

    from pandas import Series,DataFrame

    import pandas as pd

    import numpy as np

    Series可以理解为一个一维的数组,只是index可以自己改动。
    类似于定长的有序字典,有Index和value。
    传入一个list[]/tuple(),就会自动生成一个Series
    s = pd.Series(data, index=index)
    pd.Series(data,index=) index赋值必须是list类型
    #ser1=Series((1,2,3,4))
    #ser1=Series([1,2,3,4])
    ser1 = Series({'a':1,'b':2,'c':3,'d':4})

    DataFrame可以看成是以Series组成的字典,具有行索引和列索引。
    DataFrame(data,columns=,index=)其中columns为列的索引,index为行的索引。index或者columns如果不进行设置则默认为0开始的整数
    dict(one to many)生成一个DataFrame

    data ={'pop':(1,2,3,4),#[1,2,3,4]
    'state':[5,6,7,8],
    'year':[2001,2003,2003,2004]}

    d=DataFrame(data) #用字典创建DataFrame
    print(d)
    d2 = DataFrame(data,index=['one','two','three','four'])
    print(d2)
    d3 = DataFrame(data, index=['one', 'two', 'three', 'four'],columns=['year','pop','state'])#按指定列进行排序
    print(d3)

    删除:使用del或者pop(‘columns’)方法。需要注意的是所有删除的方法都会改变原来DataFrame,
    而不是像其他方法一样内存当中新建一个DataFrame。pop由于弹出特定的列,会返回被弹出的列中的数值.

    demo :

    from pandas import Series,DataFrame
    import pandas as pd
    import numpy as np

    def seriesDemo():
    #创建,(),[],{},二维的ndarray,Series,外部数据引入,比如csv, excel等
    # 获取值,index,qiepian
    # 运算 +,- *, /,
    # 读取,
    # insert,df.insert(1,'remark',df['year'])
    # 删除列(del df['two'], df.pop['two']
    #s = Series(5)
    #ser1=Series((1,2,3,4))
    #ser1=Series([1,2,3,4])
    ser1 = Series({'a':1,'b':2,'c':3,'d':4})
    print(ser1)
    print(ser1.index)
    print(ser1.values)
    print(ser1[3])

    print(ser1 > 2)
    print(ser1[ser1 > 2])
    print(ser1[ser1==2])
    print(Series(ser1,['beijin','shenzheng','shanghai','guangzhou']))
    print(Series([1,2,3,4], ['beijin', 'shenzheng', 'shanghai', 'guangzhou']))
    #Series.values和Series.index,分别查询值和索引
    print(Series[:2])



    def dataframDemo():

    # DataFrame:一维数据类型进行创建、二维ndarray创建、外部输入读取文件等手段,如csv、excel等文件
    data ={'pop':(1,2,3,4),#[1,2,3,4]
    'state':[5,8,7,8],
    'year':[2001,2003,2003,2004]}

    #创建
    d=DataFrame(data) #用字典创建DataFrame
    print(d)
    d2 = DataFrame(data,index=['one','two','three','four'])
    print(d2)
    d3 = DataFrame(data, index=['one', 'two', 'three', 'four'],columns=['year','pop','state'])#按指定列进行排序
    print(d3)
    print('*'*20)
    print(d3['year']) #get one columns #通过类似字典的取值方式,我们可以取到一个Series,根据列索引

    #loc()loc操作获取行,loc操作需要行的标签,iloc()iloc操作根据行列获取数据
    print(d3.ix[0]) #get one row
    d3['newcolumns']='2009'#给一列赋单值
    print(d3)
    d3['newcolumns']=np.arange(1,5)#给一列赋yizu值 arange(4)
    print(d3)
    d3.ix['one'] = '2000' # 给一row赋单值
    print(d3)
    d3.ix['one'] = np.arange(1,5) # 给一row赋单值
    print(d3)

    val = Series([1,2,3],index=['two','three','four']) #赋值一个Series,进行df精确匹配,其他值填充为NaN
    d3['four']=val
    print('*'*30)
    print(d3)

    #insert
    d3.insert(1, 'remrk', d['year'])
    print(d)

    #get top and botton 5 row
    print(d3.head()) #查询前几行的数据默认为5行
    print(d3.tail()) #查看后几行书,默认为5行
    print('*' * 30)

    #sort index,value
    print(d3.sort_index(axis=1,ascending=False))
    print(d3.sort_values(by='year', ascending=False))
    print(d3[0:2])
    print(d3['year'])
    print(d3.loc[['one','two'],['year','pop']]) #by indexname, columns name get data 标签
    print(d3.iloc[0:1,0:1]) #by qie pian get data 绝对位置
    print(d3[d3 >3])
    print(d3[d3['year']==1])
    print(d3[d3['year'].isin([1,2003])])

    #assign操作会把结果储存在DataFrame中
    d4 = d3.assign(remark=d['pop'] + 10)
    print(d4)
    #del columns
    del d3['four'] # del用于删除一列

    #del Nan
    print(d3.dropna(axis=1,how='any'))
    print(d3.dropna(axis=1, how='all'))#axis为0/1参数;how为any/all参数,any是存在NaN就把对应的整行/列删除,all是全部为NaN才把对应的整行/列删除

    #对于NaN的处理:
    print(d3.fillna('0')) #将所有NaN赋值为0
    print(d3.isnull()==True) #是否为null

    #合并:concat,merge,append
    print(pd.concat([d3,d3],ignore_index=True)) #多个DataFrame进行合并,ignore_index是boolean值,用来确定要不要重新对index从0开始赋值
    print('*'*30)
    #print(pd.merge([d3, d3],on=True))
    print(d3.append(d3,ignore_index=True)) #部添加一个object,可以是DataFrame也可以是Series,ignore_index就是用来确定要不要重新对index从0开始赋值,这个比较好理解。

    #分组:groupby
    print('*groupby'*10)
    d4=d3.groupby(by='year',axis=0,as_index=True) #按照一些规则将数据分为不同的组;对于每组数据分别执行一个函数;将结果组合到一个数据结构中。as_index指的是分组依据是否作为索引存在,
    # 有多个分组依据时,会合并成一个tuple,作为一列
    print(d4.aggregate(np.max)) #通过aggregate(arg)方法可以打印分好组的group,arg可以为dict类型或者list类型。
    d5 = d3.groupby(['year','pop'],as_index=False)
    d6 = d5.aggregate(np.sum)
    print('d6',d6)

    print('agg',d3.groupby(['year'])['pop'].agg([np.mean])) #agg(arg)方法对分好组的group进行计算
    # d = DataFrame(np.random.randn(4, 2))
    # print(d)


    def pandreadcsvDemo():
    cs = pd.read_csv(r'C:360安全浏览器下载2016517_118269_TravelRecords.xls',encoding='UTF-8')
    data = DataFrame(cs,columns=['name','date'])
  • 相关阅读:
    好久没有写博客了
    老师网站 回顾及复习 https://www.linuxprobe.com/ (linux就该这么学 电子版)
    这周要考试了,还没有时间干其它的了,
    linux学习第十九天 (Linux就该这么学) 结课了
    linux学习第十八天 (Linux就该这么学)
    linux学习第十七天 (Linux就该这么学)
    Spanner's Correctness Constraints on Transactions
    Linearizability
    HDFS vs GFS
    Raft
  • 原文地址:https://www.cnblogs.com/csj007523/p/7374392.html
Copyright © 2011-2022 走看看