zoukankan      html  css  js  c++  java
  • Pandas 数据结构Dataframe:基本概念及创建

    "二维数组"Dataframe:是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值、字符串、布尔值等。

    Dataframe中的数据以一个或多个二维块存放,不是列表、字典或一维数组结构。

    1. Dataframe的数据结构

    # Dataframe 数据结构
    # Dataframe是一个表格型的数据结构,“带有标签的二维数组”。
    # Dataframe带有index(行标签)和columns(列标签)
    
    data = {'name':['Jack','Tom','Mary'],
            'age':[18,19,20],
           'gender':['m','m','w']}
    frame = pd.DataFrame(data)
    print(frame,'
    ')  
    print(type(frame),'
    ')
    print(frame.index,'
    该数据类型为:',type(frame.index),'
    ')
    print(frame.columns,'
    该数据类型为:',type(frame.columns),'
    ')
    print(frame.values,'
    该数据类型为:',type(frame.values),'
    ')
    # 查看数据,数据类型为dataframe
    # .index查看行标签
    # .columns查看列标签
    # .values查看值,数据类型为ndarray

    输出结果:

       age gender  name
    0   18      m  Jack
    1   19      m   Tom
    2   20      w  Mary 
    
    <class 'pandas.core.frame.DataFrame'> 
    
    RangeIndex(start=0, stop=3, step=1) 
    该数据类型为: <class 'pandas.indexes.range.RangeIndex'> 
    
    Index(['age', 'gender', 'name'], dtype='object') 
    该数据类型为: <class 'pandas.indexes.base.Index'> 
    
    [[18 'm' 'Jack']
     [19 'm' 'Tom']
     [20 'w' 'Mary']] 
    该数据类型为: <class 'numpy.ndarray'> 

    2.数据结构其他注意的地方

    print(frame,'
    ')
    print(frame.columns.tolist(),'
    ')  #查看列名
    print(frame.values,'
    ')   #嵌套列表
    print(frame.values.tolist())

    输出结果:

       age gender  name
    0   18      m  Jack
    1   19      m   Tom
    2   20      w  Mary 
    
    ['age', 'gender', 'name'] 
    
    [[18 'm' 'Jack']
     [19 'm' 'Tom']
     [20 'w' 'Mary']] 
    
    [[18, 'm', 'Jack'], [19, 'm', 'Tom'], [20, 'w', 'Mary']]

    3. #Series 与 Dataframe的关系  其实就是Dataframe的一列 

    age = frame['age']  #列的索引
    print(age)
    print(type(age))

    输出结果:

    0    18
    1    19
    2    20
    Name: age, dtype: int64
    <class 'pandas.core.series.Series'>

    二. DataFrame 的创建方法

    1.由数组/list组成的字典

    # Dataframe 创建方法一:由数组/list组成的字典
    # 创建方法:pandas.Dataframe()
    
    data1 = {'a':[1,2,3],
            'b':[3,4,5],
            'c':[5,6,7]}
    data2 = {'one':np.random.rand(3),
            'two':np.random.rand(3)}   # 这里如果尝试  'two':np.random.rand(4) 会怎么样?
    print(data1)
    print(data2)
    df1 = pd.DataFrame(data1)
    df2 = pd.DataFrame(data2)
    print(df1)
    print(df2)
    # 由数组/list组成的字典 创建Dataframe,columns为字典key,index为默认数字标签
    # 字典的值的长度必须保持一致!
    
    df1 = pd.DataFrame(data1, columns = ['b','c','a','d'])
    print(df1)
    df1 = pd.DataFrame(data1, columns = ['b','c'])
    print(df1)
    # columns参数:可以重新指定列的顺序,格式为list,如果现有数据中没有该列(比如'd'),则产生NaN值
    # 如果columns重新指定时候,列的数量可以少于原数据
    df1['s'] = 10   #添加列
    print(df1)
    del df1['s']    #删除列
    print(df1)
    
    df2 = pd.DataFrame(data2, index = ['f1','f2','f3'])  # 这里如果尝试  index = ['f1','f2','f3','f4'] 会怎么样?——》会报错
    print(df2)
    # index参数:重新定义index,格式为list,长度必须保持一致 添加列没事,添加标签就不行了

    输出结果:

    {'b': [3, 4, 5], 'a': [1, 2, 3], 'c': [5, 6, 7]}
    {'one': array([0.53592778, 0.1429434 , 0.40188575]), 'two': array([0.59196586, 0.40463609, 0.66488198])}
       a  b  c
    0  1  3  5
    1  2  4  6
    2  3  5  7
            one       two
    0  0.535928  0.591966
    1  0.142943  0.404636
    2  0.401886  0.664882
       b  c  a    d
    0  3  5  1  NaN
    1  4  6  2  NaN
    2  5  7  3  NaN
       b  c
    0  3  5
    1  4  6
    2  5  7
       b  c   s
    0  3  5  10
    1  4  6  10
    2  5  7  10
       b  c
    0  3  5
    1  4  6
    2  5  7
             one       two
    f1  0.535928  0.591966
    f2  0.142943  0.404636
    f3  0.401886  0.664882

    2. # Dataframe 创建方法二:由Series组成的字典

    # Dataframe 创建方法二:由Series组成的字典
    
    data1 = {'one':pd.Series(np.random.rand(2)),
            'two':pd.Series(np.random.rand(3))}  # 没有设置index的Series
    data2 = {'one':pd.Series(np.random.rand(2), index = ['a','b']),
            'two':pd.Series(np.random.rand(3),index = ['a','b','c'])}  # 设置了index的Series
    print(data1)
    print(data2)
    df1 = pd.DataFrame(data1)
    df2 = pd.DataFrame(data2)
    print(df1)
    print(df2)
    # 由Seris组成的字典 创建Dataframe,columns为字典key,index为Series的标签(如果Series没有指定标签,则是默认数字标签)
    # Series可以长度不一样,生成的Dataframe会出现NaN值

    输出结果:

    {'two': 0    0.331382
    1    0.508265
    2    0.615997
    dtype: float64, 'one': 0    0.857739
    1    0.165800
    dtype: float64}
    {'two': a    0.826446
    b    0.983392
    c    0.187749
    dtype: float64, 'one': a    0.920073
    b    0.215178
    dtype: float64}
            one       two
    0  0.857739  0.331382
    1  0.165800  0.508265
    2       NaN  0.615997
            one       two
    a  0.920073  0.826446
    b  0.215178  0.983392
    c       NaN  0.187749

    3.# Dataframe 创建方法三:通过二维数组直接创建

    # Dataframe 创建方法三:通过二维数组直接创建
    
    ar = np.random.rand(9).reshape(3,3)
    print(ar)
    df1 = pd.DataFrame(ar)
    df2 = pd.DataFrame(ar, index = ['a', 'b', 'c'], columns = ['one','two','three'])  # 可以尝试一下index或columns长度不等于已有数组的情况
    print(df1)
    print(df2)
    # 通过二维数组直接创建Dataframe,得到一样形状的结果数据,如果不指定index和columns,两者均返回默认数字格式
    # index和colunms指定长度与原数组保持一致

    输出结果:

    [[0.33940056 0.77384698 0.25308293]
     [0.28151251 0.02875986 0.7516066 ]
     [0.34746659 0.25245068 0.68979615]]
              0         1         2
    0  0.339401  0.773847  0.253083
    1  0.281513  0.028760  0.751607
    2  0.347467  0.252451  0.689796
            one       two     three
    a  0.339401  0.773847  0.253083
    b  0.281513  0.028760  0.751607
    c  0.347467  0.252451  0.689796

    4.其他注意的地方:

    df = pd.DataFrame(np.random.randn(100,3),columns = ['A','B','C'])    #后面常用到的
    df
    import matplotlib.pyplot as plt
    df.plot()
    plt.show()
    df.head()   #查看表头,默认查看前五条数据

    输出结果:



  • 相关阅读:
    lanya
    Apple watch ,小米微信通知
    jenkins grunt 自动构建流程
    刷机步骤
    ipad忘记了锁屏密码,已经越狱了
    ar
    如何在ubuntu中安装php
    阿里云
    docker swarm 集群及可视化界面的安装及配置
    https://github.com/gaoyangxiaozhu/DockerVI
  • 原文地址:https://www.cnblogs.com/carlber/p/9911960.html
Copyright © 2011-2022 走看看