美文网首页
Pandas数据结构之DataFrame

Pandas数据结构之DataFrame

作者: 呆鸟的简书 | 来源:发表于2019-11-21 17:25 被阅读0次

    DataFrame

    DataFrame 是由多种类型的列构成的二维标签数据结构,类似于 Excel 、SQL 表,或 Series 对象构成的字典。DataFrame 是最常用的 Pandas 对象,与 Series 一样,DataFrame 支持多种类型的输入数据:

    除了数据,还可以有选择地传递 index(行标签)和 columns(列标签)参数。传递了索引或列,就可以确保生成的 DataFrame 里包含索引或列。Series 字典加上指定索引时,会丢弃与传递的索引不匹配的所有数据。

    没有传递轴标签时,按常规依据输入数据进行构建。

    Python > = 3.6,且 Pandas > = 0.23,数据是字典,且未指定 columns 参数时,DataFrame 的列按字典的插入顺序排序。

    Python < 3.6 或 Pandas < 0.23,且未指定 columns 参数时,DataFrame 的列按字典键的字母排序。

    用 Series 字典或字典生成 DataFrame

    生成的索引是每个 Series 索引的并集。先把嵌套字典转换为 Series。如果没有指定列,DataFrame 的列就是字典键的有序列表。

    In [37]: d = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
       ....:      'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
       ....: 
    
    In [38]: df = pd.DataFrame(d)
    
    In [39]: df
    Out[39]: 
       one  two
    a  1.0  1.0
    b  2.0  2.0
    c  3.0  3.0
    d  NaN  4.0
    
    In [40]: pd.DataFrame(d, index=['d', 'b', 'a'])
    Out[40]: 
       one  two
    d  NaN  4.0
    b  2.0  2.0
    a  1.0  1.0
    
    In [41]: pd.DataFrame(d, index=['d', 'b', 'a'], columns=['two', 'three'])
    Out[41]: 
       two three
    d  4.0   NaN
    b  2.0   NaN
    a  1.0   NaN
    

    indexcolumns 属性分别用于访问行、列标签:

    指定列与数据字典一起传递时,传递的列会覆盖字典的键。

    In [42]: df.index
    Out[42]: Index(['a', 'b', 'c', 'd'], dtype='object')
    
    In [43]: df.columns
    Out[43]: Index(['one', 'two'], dtype='object')
    

    用多维数组字典、列表字典生成 DataFrame

    多维数组的长度必须相同。如果传递了索引参数,index 的长度必须与数组一致。如果没有传递索引参数,生成的结果是 range(n)n 为数组长度。

    In [44]: d = {'one': [1., 2., 3., 4.],
       ....:      'two': [4., 3., 2., 1.]}
       ....: 
    
    In [45]: pd.DataFrame(d)
    Out[45]: 
       one  two
    0  1.0  4.0
    1  2.0  3.0
    2  3.0  2.0
    3  4.0  1.0
    
    In [46]: pd.DataFrame(d, index=['a', 'b', 'c', 'd'])
    Out[46]: 
       one  two
    a  1.0  4.0
    b  2.0  3.0
    c  3.0  2.0
    d  4.0  1.0
    

    用结构多维数组或记录多维数组生成 DataFrame

    本例与数组字典的操作方式相同。

    In [47]: data = np.zeros((2, ), dtype=[('A', 'i4'), ('B', 'f4'), ('C', 'a10')])
    
    In [48]: data[:] = [(1, 2., 'Hello'), (2, 3., "World")]
    
    In [49]: pd.DataFrame(data)
    Out[49]: 
       A    B         C
    0  1  2.0  b'Hello'
    1  2  3.0  b'World'
    
    In [50]: pd.DataFrame(data, index=['first', 'second'])
    Out[50]: 
            A    B         C
    first   1  2.0  b'Hello'
    second  2  3.0  b'World'
    
    In [51]: pd.DataFrame(data, columns=['C', 'A', 'B'])
    Out[51]: 
              C  A    B
    0  b'Hello'  1  2.0
    1  b'World'  2  3.0
    

    DataFrame 的运作方式与 NumPy 二维数组不同。

    用列表字典生成 DataFrame

    In [52]: data2 = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
    
    In [53]: pd.DataFrame(data2)
    Out[53]: 
       a   b     c
    0  1   2   NaN
    1  5  10  20.0
    
    In [54]: pd.DataFrame(data2, index=['first', 'second'])
    Out[54]: 
            a   b     c
    first   1   2   NaN
    second  5  10  20.0
    
    In [55]: pd.DataFrame(data2, columns=['a', 'b'])
    Out[55]: 
       a   b
    0  1   2
    1  5  10
    

    用元组字典生成 DataFrame

    元组字典可以自动创建多层索引 DataFrame。

    In [56]: pd.DataFrame({('a', 'b'): {('A', 'B'): 1, ('A', 'C'): 2},
       ....:               ('a', 'a'): {('A', 'C'): 3, ('A', 'B'): 4},
       ....:               ('a', 'c'): {('A', 'B'): 5, ('A', 'C'): 6},
       ....:               ('b', 'a'): {('A', 'C'): 7, ('A', 'B'): 8},
       ....:               ('b', 'b'): {('A', 'D'): 9, ('A', 'B'): 10}})
       ....: 
    Out[56]: 
           a              b      
           b    a    c    a     b
    A B  1.0  4.0  5.0  8.0  10.0
      C  2.0  3.0  6.0  7.0   NaN
      D  NaN  NaN  NaN  NaN   9.0
    

    用 Series 创建 DataFrame

    生成的 DataFrame 继承了输入的 Series 的索引,如果没有指定列名,默认列名是输入 Series 的名称。

    缺失数据

    更多内容,详见缺失数据 。DataFrame 里的缺失值用 np.nan 表示。DataFrame 构建器以 numpy.MaskedArray 为参数时 ,被屏蔽的条目为缺失数据。

    备选构建器

    DataFrame.from_dict

    DataFrame.from_dict 接收字典组成的字典或数组序列字典,并生成 DataFrame。除了 orient 参数默认为 columns,本构建器的操作与 DataFrame 构建器类似。把 orient 参数设置为 'index', 即可把字典的键作为行标签。

    In [57]: pd.DataFrame.from_dict(dict([('A', [1, 2, 3]), ('B', [4, 5, 6])]))
    Out[57]: 
       A  B
    0  1  4
    1  2  5
    2  3  6
    

    orient='index' 时,键是行标签。本例还传递了列名:

    In [58]: pd.DataFrame.from_dict(dict([('A', [1, 2, 3]), ('B', [4, 5, 6])]),
       ....:                        orient='index', columns=['one', 'two', 'three'])
       ....: 
    Out[58]: 
       one  two  three
    A    1    2      3
    B    4    5      6
    

    DataFrame.from_records

    DataFrame.from_records 构建器支持元组列表或结构数据类型(dtype)的多维数组。本构建器与 DataFrame 构建器类似,只不过生成的 DataFrame 索引是结构数据类型指定的字段。例如:

    In [59]: data
    Out[59]: 
    array([(1, 2., b'Hello'), (2, 3., b'World')],
          dtype=[('A', '<i4'), ('B', '<f4'), ('C', 'S10')])
    
    In [60]: pd.DataFrame.from_records(data, index='C')
    Out[60]: 
              A    B
    C               
    b'Hello'  1  2.0
    b'World'  2  3.0
    

    Pandas 上手实战系列

    相关文章

      网友评论

          本文标题:Pandas数据结构之DataFrame

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