美文网首页AnacandaP
pandas笔记(pandas Data Structures)

pandas笔记(pandas Data Structures)

作者: 生信start_site | 来源:发表于2020-06-15 03:02 被阅读0次

    pandas包含数据结构和数据操作工具,可用于进行数据清理和快速分析。pandas经常和数字计算工具(比如NumPy和SciPy)一起使用分析文库,或者与matplotlib一起使用进行数据的可视化。pandas采用NumPy的基于数组计算的部分惯用风格,特别是基于数组的计算函数和不带for循环的数据处理。虽然pandas采用了许多来自NumPy的编码习惯用法,但最大的区别在于pandas是为处理表格或异质性(heterogeneous)数据而设计的。相反,NumPy适合处理均一的(homogeneous)数值阵列数据。

    使用下面代码调用pandas:

    import pandas as pd
    

    所以,如果你看到了有pd.**这样的代码,就说明是pandas的功能。

    有关于pandas的数据结构,你需要了解两种主要的数据结构:Series 和 DataFrame。虽然这两个数据结构不能解决所有的问题,但是却可以提供一个坚实的、易于使用的应用基础。

    Series

    Series是一个一维的、类似数组的对象,它包含一系列的值,和一个相关数组(数据标签),也叫做索引(index)。最简单的Series是由一个数组组成的数据:

    In [1]: import pandas as pd
    
    In [2]: obj = pd.Series([4, 7, -5, 3])
    
    In [3]: obj
    Out[3]:
    0    4
    1    7
    2   -5
    3    3
    dtype: int64
    
    In [4]: obj.values
    Out[4]: array([ 4,  7, -5,  3])
    
    In [5]: obj.index
    Out[5]: RangeIndex(start=0, stop=4, step=1)
    

    因为上面我们并没有为数据指定索引,所以默认的索引就是从0开始的整数,当然你可以自定义数据的索引:

    In [6]: obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
    
    In [7]: obj2
    Out[7]:
    d    4
    b    7
    a   -5
    c    3
    dtype: int64
    
    In [8]: obj2.index
    Out[8]: Index(['d', 'b', 'a', 'c'], dtype='object')
    

    筛选大于0的元素以及其对应的索引:

    In [9]: obj2[obj2>0]
    Out[9]:
    d    4
    b    7
    c    3
    dtype: int64
    

    对Series进行计算:

    In [10]: obj2 * 2
    Out[10]:
    d     8
    b    14
    a   -10
    c     6
    dtype: int64
    

    如果你的data是一个python dict,也可以通过dict构建一个Series:

    In [11]: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
    
    In [12]: obj3 = pd.Series(sdata)
    
    In [13]: obj3
    Out[13]:
    Ohio      35000
    Texas     71000
    Oregon    16000
    Utah       5000
    dtype: int64
    

    你也可以从Series里提取出指定的索引以及其对应的内容:

    In [15]: states = ['California', 'Ohio', 'Oregon', 'Texas']
    
    In [16]: obj4 = pd.Series(sdata,index=states)
    
    In [17]: obj4
    Out[17]:
    California        NaN #这里显示的是NaN,是因为在obj3里并没有索引为“California”的内容
    Ohio          35000.0
    Oregon        16000.0
    Texas         71000.0
    dtype: float64
    

    将两个Seires相加:

    In [18]: obj3 + obj4
    Out[18]:
    California         NaN #只有obj4里有California这个索引
    Ohio           70000.0
    Oregon         32000.0
    Texas         142000.0
    Utah               NaN #只有obj3里有Utah这个索引,所以任何数和NaN相加都是NaN
    dtype: float64
    

    给对象命名,并且给索引这一列加一个列名:

    In [19]: obj4.name = 'population'
    
    In [20]: obj4.index.name = 'state'
    
    In [21]: obj4
    Out[21]:
    state
    California        NaN
    Ohio          35000.0
    Oregon        16000.0
    Texas         71000.0
    Name: population, dtype: float64
    

    DataFrame

    DataFrame对于很多分析过生信的人来说并不陌生,它是一个table,包含行和列,行和列有各自的数据类型(数字,字符串等等)。这里的DataFrame有行索引和列索引,你可以把它看成一个具有相同索引的Series字典。数据被存储在一个或更多的二维模块里,而不是列表、字典或其他一些一维数组里。

    有很多种方法可以构建DataFrame

    (1)最常用的方法是利用等长的list组成的字典或者Numpy array来构建DataFrame:

    In [23]: data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        ...: 'year': [2000, 2001, 2002, 2001, 2002, 2003],
        ...: 'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
    
    In [24]: frame = pd.DataFrame(data)
    
    In [25]: frame
    Out[25]:
        state  year  pop
    0    Ohio  2000  1.5
    1    Ohio  2001  1.7
    2    Ohio  2002  3.6
    3  Nevada  2001  2.4
    4  Nevada  2002  2.9
    5  Nevada  2003  3.2
    

    如果这里你用的是jupyter notebook的web界面,输出的DataFrame会更好看一些:

    查看DataFrame的前5列:

    In [26]: frame.head()
    Out[26]:
        state  year  pop
    0    Ohio  2000  1.5
    1    Ohio  2001  1.7
    2    Ohio  2002  3.6
    3  Nevada  2001  2.4
    4  Nevada  2002  2.9
    

    修改你的DataFrame的列名:

    In [27]: pd.DataFrame(data, columns=['year', 'state', 'pop'])
    Out[27]:
       year   state  pop
    0  2000    Ohio  1.5
    1  2001    Ohio  1.7
    2  2002    Ohio  3.6
    3  2001  Nevada  2.4
    4  2002  Nevada  2.9
    5  2003  Nevada  3.2
    

    提取DataFrame里的某一列:

    In [28]: frame['state']
    Out[28]:
    0      Ohio
    1      Ohio
    2      Ohio
    3    Nevada
    4    Nevada
    5    Nevada
    Name: state, dtype: object
    
    In [29]: frame['year']
    Out[29]:
    0    2000
    1    2001
    2    2002
    3    2001
    4    2002
    5    2003
    Name: year, dtype: int64
    

    提取DateFrame里的行:

    In [6]: frame.loc[frame['state']=='Ohio'] #提取state一列里是Ohio的行
    Out[6]:
      state  year  pop
    0  Ohio  2000  1.5
    1  Ohio  2001  1.7
    2  Ohio  2002  3.6
    

    给DataFrame加一列:

    In [13]: frame['eastern'] = frame.state == 'Ohio'
    
    In [14]: frame
    Out[14]:
        state  year  pop   eastern
    0    Ohio  2000  1.5     True
    1    Ohio  2001  1.7     True
    2    Ohio  2002  3.6     True
    3  Nevada  2001  2.4     False
    4  Nevada  2002  2.9     False
    5  Nevada  2003  3.2     False
    

    删除一列:

    In [16]: del frame['eastern']
    
    In [17]: frame
    Out[17]:
        state  year  pop
    0    Ohio  2000  1.5
    1    Ohio  2001  1.7
    2    Ohio  2002  3.6
    3  Nevada  2001  2.4
    4  Nevada  2002  2.9
    5  Nevada  2003  3.2
    

    显示列名:

    In [18]: frame.columns
    Out[18]: Index(['state', 'year', 'pop'], dtype='object')
    

    (2)利用嵌套字典构建DataFrame

    In [19]: pop = {'Nevada': {2001: 2.4, 2002: 2.9},
        ...: 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
    
    In [20]: frame3 = pd.DataFrame(pop)
    
    In [21]: frame3
    Out[21]:
          Nevada  Ohio
    2001     2.4   1.7
    2002     2.9   3.6
    2000     NaN   1.5
    

    DataFrame转置:

    In [22]: frame3.T
    Out[22]:
            2001  2002  2000
    Nevada   2.4   2.9   NaN
    Ohio     1.7   3.6   1.5
    

    根据索引提取内容:

    In [23]: pd.DataFrame(pop, index=[2001, 2002, 2003])
    Out[23]:
          Nevada  Ohio
    2001     2.4   1.7
    2002     2.9   3.6
    2003     NaN   NaN #原dataFrame里没有2003这个索引,所以结果这里是NaN
    

    给索引列和列名分别起名字:

    In [24]: frame3.index.name = 'year'; frame3.columns.name = 'state'
    
    In [25]: frame3
    Out[25]:
    state  Nevada  Ohio
    year
    2001      2.4   1.7
    2002      2.9   3.6
    2000      NaN   1.5
    

    相关文章

      网友评论

        本文标题:pandas笔记(pandas Data Structures)

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