美文网首页
pandas数据结构基础-DataFrame

pandas数据结构基础-DataFrame

作者: 有机会一起种地OT | 来源:发表于2019-11-21 15:51 被阅读0次

    DataFrame是一个2维的带标签的数据结构。可以把它看做是一个SQL表,或时一个Series对象的字典。是最常使用的pandas对象。

    DataFrame的构建

    和Series一样,DataFrame接受多种不同的输入,如1维ndarray、list、字典、Series构成的字典、numpy结构化数组,或是另一个DataFrame。

    除了数据输入之外,还可以随意的输入索引(行标签)和列(列标签)参数。如果输入一个索引或列,

    下面介绍一些常用的用于构建DataFrame的输入

    1、 Series或字典构成的字典
    所构成的DataFrame的索引,是输入的各Series的索引的并集。如果输入是一个嵌套的字典,会先将其转换为Series。如果没有传入columns参数,那么列按字典key进行排序。

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

    DataFrame对象的行和列标签可分别通过 index 和 columns 属性获取:df.indexdf.columns

    2、ndarray/list/tuple构成的字典
    组成字典的ndarray必须具有相同的长度。如果传入了 index 参数,长度也必须与ndarray的长度相等。如果没有传入 index 参数,则索引为range(n),n为ndarray长度。

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

    3、字典的list

    data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
    In: pd.DataFrame(data)
    Out: 
       a   b     c
    0  1   2   NaN
    1  5  10  20.0
    

    4、numpy结构化数组
    这种情况和处理 数组的字典类似。

    data = np.zeros((2, ), dtype=[('A', 'i4'), ('B', 'f4'), ('C', 'a10')])
    data[:] = [(1, 2., 'Hello'), (2, 3., "World")]
    
    In: pd.DataFrame(data)
    Out: 
       A    B         C
    0  1  2.0  b'Hello'
    1  2  3.0  b'World'
    

    此外,对字典数据,还可使用DataFrame.from_dict构造器创建DataFrame。结构化数据则可使用DataFrame.from_records进行构造。

    列的选择、添加、删除

    可以把DataFrame看做一个关于Series对象的字典,操作其列的语法类似于字典。
    通过给出列索引df['one']来获取列。
    队列的运算也以类似的方式直接进行df['three'] = df['one'] * df['two']df['flag'] = df['one'] > 2
    删除列则通过和字典类似的pop函数three = df.pop('three'),并将删除的列对象返回。

    使用标量给列赋值时,df['foo'] = 'bar', 整列均为给定标量值。
    当插入一个与DataFrame行索引不完全相同的Series时,会根据DataFrame行索引匹配Series中的值,再进行插入。
    当使用原始的ndarray给DataFrame的列赋值或创建新的列时,ndarray的长度必须与DataFrame行索引长度相同。
    默认情况下,新插入的列会排在列索引的最后。可以使用 insert 函数执行插入操作,此时可以指定新列在列索引中的位置,如df.insert(1, 'bar', df['one'])表示插入到列索引 1 位置。

    使用pandas函数得到新列

    DataFrame有一个assign()方法,可以通过调用函数,利用现有列创建新的列。如df.assign(new_col=df['a'] / df['b']),通过原列 a 和 b 相除创建 new_col 列。
    或者采用lambda函数而不直接引入DataFrame的方式:df.assign(new_col =lambda x: (x['a'] / x['b']))
    此时x表示调用assign函数的DataFrame。如需事先对DataFrame执行一些类似筛选的操作,这种调用方式更方面:
    df.query('a> 5').assign(new_col1=lambda x: x.a/ x.b, new_col2=lambda x: x.c / x.d)
    使用assign函数返回的都是数据副本,原数据不变。
    0.23.0版本后,基于python3.6保存**kwargs顺序的特征,在同一个assign函数中可以引用先创造列:
    df.assign(new_col1=lambda x: x.a/ x.b, new_col2=lambda x: x.c / x.new_col1)

    根据索引选择行列

    索引的基础用法如下

    操作 句法 结果
    选择列 df[col] Series
    用标签选择行 df.loc[label] Series
    用整数位置选择行 df.iloc[loc] Series
    行切片 df[5:10] DataFrame
    用布尔向量选择行 df[bool_vec] DataFrame
    数据对齐和运算

    DataFrame对象可以自动根据索引对齐行和列的数据。生成的结果DataFrame是原数据行和列索引的并集。
    DataFrame和Series之间执行操作,默认在DataFrame的列上对齐Sereis的索引。并按行进行广播。
    如果DataFrame的行索引中包含日期,则按列广播。

    支持元素级别的布尔运算,对布尔型DataFramedf1df2,可直接运算df1 & df2df1 | df2df1 ^ df2-df1

    转置

    类似多维数组,T属性可以转置DataFrame,df.T

    DataFrame应用Numpy函数

    Series和DataFrame可使用log、exp、sqrt等多种元素级ufunc。函数作用在对象的底层数组上。

    相关文章

      网友评论

          本文标题:pandas数据结构基础-DataFrame

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