• pandas基础--数据结构:DataFrame


    DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等)。DataFrame既可以行索引也可以列索引,它可以被看作由Series组成的字典(共用同一个索引)。DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。

    (1)构建DataFrame

    最常见的一种是直接传入一个等长列表或NumPy数组组成的字典,DataFrame会自动加上索引(和Series一样),且全部列会被有序排列。如果指定了列序列,就会按照指定顺序进行排列,如果传入的列在数据中找不到,就会产生NaN值。

     1 >>> data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], 'year': [2000, 2001, 2002, 2001, 2002], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
     2 >>> frame = pd.DataFrame(data)                           
     3 >>> frame
     4     state  year  pop
     5 0    Ohio  2000  1.5
     6 1    Ohio  2001  1.7
     7 2    Ohio  2002  3.6
     8 3  Nevada  2001  2.4
     9 4  Nevada  2002  2.9
    10 >>> pd.DataFrame(data, columns=['year', 'state', 'pop'])  #指定列序列
    11    year   state  pop
    12 0  2000    Ohio  1.5
    13 1  2001    Ohio  1.7
    14 2  2002    Ohio  3.6
    15 3  2001  Nevada  2.4
    16 4  2002  Nevada  2.9
    17 >>> frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 
    18 'three', 'four', 'five'])
    19 >>> frame2
    20        year   state  pop debt
    21 one    2000    Ohio  1.5  NaN
    22 two    2001    Ohio  1.7  NaN
    23 three  2002    Ohio  3.6  NaN
    24 four   2001  Nevada  2.4  NaN
    25 five   2002  Nevada  2.9  NaN
    26 >>>

    另一种常见的数据形式是嵌套字典(也就是字典的字典)。外层字典的键作为列,内层键则作为行索引。内层字典的键会被合并、排序以形成最终的索引。

     1 >>> pop = {'Nevada': {2001: 2.4, 2002:2.9}, 'Ohio':{2000: 1.5, 2001: 1.7, 2002: 3.6}}
     2 >>> frame3 = pd.DataFrame(pop) 
     3 >>> frame3
     4       Nevada  Ohio
     5 2001     2.4   1.7
     6 2002     2.9   3.6
     7 2000     NaN   1.5
     8 >>> frame3.T  #可以进行转置
     9         2001  2002  2000
    10 Nevada   2.4   2.9   NaN
    11 Ohio     1.7   3.6   1.5
    12 >>> pd.DataFrame(pop, index=[2001, 2002, 2003])  #显示指定索引
    13       Nevada  Ohio
    14 2001     2.4   1.7
    15 2002     2.9   3.6
    16 2003     NaN   NaN
    17 >>>

    下表是DataFrame构造函数所能接受的各种数据。

    类型

    说明

    二维ndarray

    数据矩阵,还可以传入行标和列标

    由数组、列表或元组组成的字典

    每个序列会变成Datarame的一列,所有序列的长度必须相同。

    NumPy的结构化/记录数组

    类似于“由数组组成的字典”

    由Series组成的字典

    每个Series会称为一列,如果没有显示指定索引,则各Series的索引会被合并成结果的行索引。

    由字典组成的字典

    各内层字典会成为一列,键会被合并成结果的行索引,跟“由Series组成的字典”的情况一样。

    字典或Series的列表

    各项将会成为DataFrame的一行,字典键或Series索引的并集将会成为DataFrame的列标。

    由列表或元组组成的列表

    类似于“二维ndarray”

    另一个DataFrame

    该DataFrame的索引将被沿用,除非显示指定了其他索引

    NumPy的MaskedArray

    类似于“二维ndarray”的情况,知识掩码值在结果DataFrame会变成Na/缺省值。

    (2)获取值

    通过字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且其name属性已经被相应的设置好了。

     1 >>> frame2
     2        year   state  pop debt
     3 one    2000    Ohio  1.5  NaN
     4 two    2001    Ohio  1.7  NaN
     5 three  2002    Ohio  3.6  NaN
     6 four   2001  Nevada  2.4  NaN
     7 five   2002  Nevada  2.9  NaN
     8 >>> frame2['state'] 
     9 one        Ohio
    10 two        Ohio
    11 three      Ohio
    12 four     Nevada
    13 five     Nevada
    14 Name: state, dtype: object
    15 >>> frame2.year    
    16 one      2000
    17 two      2001
    18 three    2002
    19 four     2001
    20 five     2002
    21 Name: year, dtype: int64

    (3)赋值

    列可以通过赋值的方式进行修改。

     1 >>> frame2
     2        year   state  pop debt
     3 one    2000    Ohio  1.5  NaN
     4 two    2001    Ohio  1.7  NaN
     5 three  2002    Ohio  3.6  NaN
     6 four   2001  Nevada  2.4  NaN
     7 five   2002  Nevada  2.9  NaN
     8 >>> frame2['debt'] = 16.5
     9 >>> frame2
    10        year   state  pop  debt
    11 one    2000    Ohio  1.5  16.5
    12 two    2001    Ohio  1.7  16.5
    13 three  2002    Ohio  3.6  16.5
    14 four   2001  Nevada  2.4  16.5
    15 five   2002  Nevada  2.9  16.5
    16 >>> frame2['debt'] = np.arange(5) 
    17 >>> frame2
    18        year   state  pop  debt
    19 one    2000    Ohio  1.5     0
    20 two    2001    Ohio  1.7     1
    21 three  2002    Ohio  3.6     2
    22 four   2001  Nevada  2.4     3
    23 five   2002  Nevada  2.9     4
    24 >>>

    将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配,如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值。

     1 >>> frame2
     2        year   state  pop  debt
     3 one    2000    Ohio  1.5     0
     4 two    2001    Ohio  1.7     1
     5 three  2002    Ohio  3.6     2
     6 four   2001  Nevada  2.4     3
     7 five   2002  Nevada  2.9     4
     8 >>> val = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
     9 >>> frame2.debt = val 
    10 >>> frame2
    11        year   state  pop  debt
    12 one    2000    Ohio  1.5   NaN
    13 two    2001    Ohio  1.7  -1.2
    14 three  2002    Ohio  3.6   NaN
    15 four   2001  Nevada  2.4  -1.5
    16 five   2002  Nevada  2.9  -1.7
    17 >>>

    为不存在的列赋值会创建一个新列,关键字del用于删除列:

     1 >>> frame2 
     2        year   state  pop  debt
     3 one    2000    Ohio  1.5   NaN
     4 two    2001    Ohio  1.7  -1.2
     5 three  2002    Ohio  3.6   NaN
     6 four   2001  Nevada  2.4  -1.5
     7 five   2002  Nevada  2.9  -1.7
     8 >>> frame2['eastern'] = frame2.state == 'Ohio' 
     9 >>> frame2 
    10        year   state  pop  debt  eastern
    11 one    2000    Ohio  1.5   NaN     True
    12 two    2001    Ohio  1.7  -1.2     True
    13 three  2002    Ohio  3.6   NaN     True
    14 four   2001  Nevada  2.4  -1.5    False
    15 five   2002  Nevada  2.9  -1.7    False
    16 >>> del frame2['eastern']
    17 >>> frame2.columns
    18 Index(['year', 'state', 'pop', 'debt'], dtype='object')
    19 >>>

    (4)其他

    如果设置了DataFrame的index和columns的name属性。这些信息也会被显示出来。

     1 >>> frame3
     2       Nevada  Ohio
     3 2001     2.4   1.7
     4 2002     2.9   3.6
     5 2000     NaN   1.5
     6 >>> frame3.index.name = 'year' 
     7 >>> frame3.columns.name = 'state'
     8 >>> frame3
     9 state  Nevada  Ohio
    10 year
    11 2001      2.4   1.7
    12 2002      2.9   3.6
    13 2000      NaN   1.5
    14 >>> frame3.values
    15 array([[2.4, 1.7],
    16        [2.9, 3.6],
    17        [nan, 1.5]])
    18 >>>
  • 相关阅读:
    Educational Codeforces Round 85 D. Minimum Euler Cycle(模拟/数学/图)
    Educational Codeforces Round 85 C. Circle of Monsters(贪心)
    NOIP 2017 提高组 DAY1 T1小凯的疑惑(二元一次不定方程)
    Educational Codeforces Round 85 B. Middle Class(排序/贪心/水题)
    Educational Codeforces Round 85 A. Level Statistics(水题)
    IOS中的三大事件
    用Quartz 2D画小黄人
    strong、weak、copy、assign 在命名属性时候怎么用
    用代码生成UINavigationController 与UITabBarController相结合的简单QQ框架(部分)
    Attempting to badge the application icon but haven't received permission from the user to badge the application错误解决办法
  • 原文地址:https://www.cnblogs.com/mrlayfolk/p/12252378.html
Copyright © 2020-2023  润新知