美文网首页
114、pandas的DataFrame

114、pandas的DataFrame

作者: 陈容喜 | 来源:发表于2017-12-22 16:35 被阅读0次

    DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
    DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。跟他类似的数据结构相比,DataFrame面向行和列的操作基本上是平衡的。
    DataFrame中的数据是以一个或多个二维块存放的(并不像列表、字典或别的一维数据结构)。

    构建DataFrame:由一个等长列表或NumPy数组组成的字典构建。比如以广东、山东、河南三省在2013和2016的常住人口为例: 1.png

    从结果可以看出,DataFrame会自动加上索引(跟Series一样),且全部列会被有序排列。
    如果指定了列序列,则DataFrame的列会按照指定顺序进行排列:


    2.png
    DataFrame跟Series一样,如果传入的列在数据中找不到,就会产生NA值: 3.png 可以通过类似字典标记的方式或属性的方式,将DataFrame的列获取为一个Series: 4.png

    从上面的例子可以看出,返回的Series拥有原DataFrame相同的索引,且name属性也被相应地设置好。

    除此以外,行也可以通过位置或名称的方式进行获取,比如使用索引字段ix: 5.png 从结果上看,.ix已不推荐使用, 建议使用.loc(基于标签的索引)和.iloc(位置索引): 6.png 列可以通过赋值的方法进行修改。例如给空的“growth rate”列附上一个标量或一组值: 7.png
    将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值NaN: 8.png
    为不存在的列赋值会创建出一个新列。关键字del用于删除列:
    9.png

    注意:Series会直接修改源DataFrame上的数据。
    另一种数据形式:嵌套字典(字典的字典)

    如果将嵌套字典传给DataFrame,会把外层字典的键作为列,内层键作为行索引,还可以对结果进行转置。 1.png
    内层字典的键会被合并、排序以形成最终的索引。如果显式指定索引,则按指定的排序:
    2.png
    由Series组成的字典:
    3.png
    下面列出了DataFrame构造函数所能接受的各种数据:
    4.png
    设置DataFrame的index和columns的name属性:
    5.png

    设置values属性,以二维ndarray的形式返回DataFrame中的数据:


    6.png
    如果DataFrame各列的数据类型不同,则值数组的数据类型会选用能兼容所有列的数据类型:
    7.png
    索引对象
    pandas的索引对象负责管理轴标签和其他元素数据(比如轴名称等)。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会转换成一个Index:
    1.png
    Index对象是不可修改: 2.png
    Index对象是不可修改才能保证Index对象在多个数据结构之间安全共享:
    3.png
    Index的功能类似一个固定大小的集合:
    4.png
    下面列出了Index的方法和属性: 5.png
    # coding: utf-8
    
    # In[1]:
    
    import numpy as np
    import pandas as pd
    from pandas import Series,DataFrame
    
    # 构建DataFrame
    data = {'province':['Guangdong','Shandong','Henan','Guangdong','Shandong','Henan'],
            'year':[2016,2016,2016,2013,2013,2013],
             'pop':[10999,9946.64,9532.42,10644,9733,9413]}
    frame = DataFrame(data)
    print (frame)
    
    
    # In[2]:
    
    # 指定列序列
    fr = DataFrame(data,columns=['year','province','pop'])
    print(fr)
    
    
    # In[3]:
    
    frame2 = DataFrame(data,columns=['year','province','pop','growth rate'],
                       index=['one','two','three','four','five','six'])
    print(frame2)                                  
    
    
    # In[4]:
    
    print(frame2.columns)
    
    
    # In[5]:
    
    print(frame2['province'])
    
    
    # In[6]:
    
    print(frame.year)
    
    
    # In[7]:
    
    # ix获取行内容
    ro = frame2.ix['three']
    print(ro)
    
    
    # In[8]:
    
    # .loc(基于标签的索引)
    print(frame2.loc[['three']])
    
    
    # In[9]:
    
    # .iloc(位置索引)
    A = frame2.iloc[[2,4],frame2.columns.get_indexer(['province','pop'])]
    print(A)
    
    
    # In[10]:
    
    # 通过赋值的方式修改列
    frame2['growth rate'] = '--'
    print (frame2)
    
    
    # In[11]:
    
    frame2['growth rate'] = '%20'
    print (frame2)
    
    
    # In[12]:
    
    frame2['growth rate'] = np.arange(6)
    print (frame2)
    
    
    # In[13]:
    
    # 赋值一个Series
    val = Series([4,3,2],index=['two','four','six'])
    frame2['growth rate'] = val
    print(frame2)
    
    
    # In[14]:
    
    # 为不存在的列赋值
    frame2['north'] = frame2.province == 'Shandong'
    print(frame2)
    
    
    # In[15]:
    
    # 使用关键字del删除列
    del frame2['north']
    print(frame2)
    
    
    # In[16]:
    
    # 嵌套字典
    pop = {'Guangdong':{2016:10999,2013:10644},
            'Shandong':{2016:9946.64,2015:9847.2,2013:9733}}
    frame3 = DataFrame(pop)
    print (frame3)
    
    
    # In[17]:
    
    # 对结果转置
    print(frame3.T)
    
    
    # In[18]:
    
    # 指定索引
    f = DataFrame(pop,index=[2016,2013,2010])
    print(f)
    
    
    # In[19]:
    
    print(frame3)
    
    
    # In[20]:
    
    # 由Series组成的字典
    pdata = {'Guangdong':frame3['Guangdong'][1:],
             'Shandong':frame3['Shandong'][1:3]}
    d = DataFrame(pdata)
    print(d)
    
    
    # In[21]:
    
    # 设置DataFrame的index和columns的name属性
    frame3.index.name = 'year';frame3.columns.name = 'province'
    print(frame3)
    
    
    # In[22]:
    
    # 设置values属性
    print(frame3.values)
    
    
    # In[23]:
    
    print(frame2)
    
    
    # In[24]:
    
    print(frame2.values)
    
    
    # In[25]:
    
    # 索引对象
    obj = Series(range(3),index=['a','b','c'])
    index = obj.index
    print(index)
    
    
    # In[26]:
    
    inre = index[1:]
    print(inre)
    
    
    # In[27]:
    
    # Index对象是不可修改:
    index[1] = 'd'
    
    
    # In[28]:
    
    index = pd.Index(np.arange(3))
    print(index)
    
    
    # In[29]:
    
    obj2 = Series([1.5,-2.5,0],index = index)
    print(obj2)
    
    
    # In[30]:
    
    obj2.index is index
    
    
    # In[31]:
    
    print(frame3)
    
    
    # In[32]:
    
    'Guangdong' in frame3.columns
    
    
    # In[33]:
    
    2012 in frame3.index
    

    相关文章

      网友评论

          本文标题:114、pandas的DataFrame

          本文链接:https://www.haomeiwen.com/subject/fvhxgxtx.html