zoukankan      html  css  js  c++  java
  • pands数据框(DataFrame)02

    数据框指含有至少两个字段(或者序列)的数据集,数据框实际就是一个数据集 ; 数据集的行代表每一条观测,列代表各个变量。

    一、创建数据框:
    1.通过嵌套元组或者嵌套列表创建:

    df1 = pd.DataFrame([['张三',20,''],['李四',52,''],['小米','20','']])
    print('通过嵌套元组或者列表创建数据框:
    ',df1)
    #索引默认为数字,当然可以自定义索引
    df11 = pd.DataFrame([['张三',20,''],['李四',52,''],['小米','20','']],index=['first','second','third'])

    2.二维数组创建:

    df2 = pd.DataFrame(np.array([['张三',20,''],['李四',52,''],['小米','20','']]))
    print('通过二维数组构造数据框:
    ',df2)
    #索引默认为数字,当然可以自定义索引:
    df22 = pd.DataFrame(np.array([['张三',20,''],['李四',52,''],['小米','20','']]),index=['first','second','third'])

    3.通过字典创建:

    df3 = pd.DataFrame({'姓名':['张三','李四','小米'],'age':[20,52,20],'性别':['','','']})
    print('通过字典形式创建DataFrame:
    ',df3)
    #索引默认为数字,当然可以自定义索引:
    df33 = pd.DataFrame(data={'姓名':['张三','李四','小米'],'age':[20,52,20],'性别':['','','']},index=['first','second','third'])
    #强烈推荐此方式

    二、访问DataFrame:
    1.按列访问(也就是按键访问值)

    print(df3['age'])

    2.按行访问:

    print(df3[1:2]) #访问第二行(索引为1)

    3.按行列号访问:

    print(df3.iloc[0:2,0:1])
    #访问的是第一第二行,第一列的内容

    4.按行索引、列名访问:

    print(df3.at['two','性别'])  
    #访问行名(索引)为two,列名为性别内容

    三、DataFrame表格修改:
    1.修改列名:

    df3.columns=['name','age','ssex']
    #df.columns是用来获取df3的列名的,而且是按顺序排列的,然后直接进行在后面传入一个修改后的各个列名组成的列表
    print(df3)

    2.修改行索引:

    #修改行索引
    df3.index=[4,5,6]
    #这里的df3.index是获取行索引,然后在=号后面填入修改后的各个行索引构成的可迭代对象即可,range(n,m)也行,n、m属于起始和结束的数字。
    print(df3)

    3.数据的删除:pd.drop(行名/列名,axis=0/1)
    drop函数并不会修改原数据,所以需要赋值给新的对象,如果要在原数据进行修改则要令参数inplace=true,(默认是flase)

    #删除行 (这里删除行名为4的一行,axis=0代表从行进行删除的操作)
    df33 = df3.drop(4,axis=0)
    #删除列(删除列名为age的一列)
    df333=df3.drop("age",axis=1) 

    4.添加和插入:
    (1).对列的添加和插入:(注意行数)

    df3.insert(0,'城市',['南宁','钦州','广西']) 
    #第一个参数是插入的位置,第二个参数是插入之后的列名是什么,第三个参数插入的内容。
    print(df3) #在原数据上进行了修改
    
    #当然也可以从其它文件或者其它对象传入数据进行添加和插入:
    data = list(df3['城市']) #insert的第三个参数传入的是list
    df2.insert(0,'city',data)

    (2)对行的添加和插入:(注意列数)

    快速插入一行:

    #在原来的df2上进行了添加,直接添加

    df2.loc['four'] = ['北京','可可',23,'女']

    print(df2)

    第二种方式,新建一个DataFrame,合并两个DataFrame

    df4 = pd.DataFrame([['海南','阿克',20,'女']])

    #print(df4)

    df4.columns = df3.columns

    #合并需要设置ignore_index=True,而且这种合并是合并到临时对象上的,也就是需要赋值给变量才能保存下来。

    df_new = pd.concat([df3,df4],ignore_index=True)

    print(df_new)

    5、遍历数据:
    (1)遍历列

    #这里直接遍历的是df_new的列字段(列名)
    for cname in df_new:
        print('df_new的列名(字段名):   ',cname,'
    ')
        print('df_new中的列名对应的值:  
    ',df_new[cname])

    (2)遍历行:

    #第一种方法
    #df_new的index属性返回从0开始的行下标索引
    for rindex in df_new.index:
        print('现在是第',rindex,'')
        print('这一行的内容是:
    ',df_new.loc[rindex])
    #第二种方法(返回数组,每一行一个数组)
    #df_new的values属性直接返回多个数组组成的数组(复合数组也叫嵌套数组)
    for r in df_new.values:
        print(r)

    (3)遍历行和列

    #df_new.iterrows()返回一个类生成器,其实经过多次验证,这里的生成器生成的是由(行,列)组成的嵌套元组
    for index,row in df_new.iterrows():
        print('第',index,'行')
        print(row)
    
    
  • 相关阅读:
    ORA-28000: the account is locked-的解决办法
    j对ava序列化的学习理解
    Oracle数据库中的时间格式和java中时间格式的转换
    抽象类和接口的区别
    glVertexAttribPointer
    运算符重载
    lua回调时把函数当参数传递时需注意的事项
    visual studio 编译文件生成路径
    UITableView自定义Cell中,纯代码编程动态获取高度
    ASP.NET发送邮件(QQ发送)
  • 原文地址:https://www.cnblogs.com/chenruhai/p/12464240.html
Copyright © 2011-2022 走看看