美文网首页
pandas学习-4

pandas学习-4

作者: 蓝剑狼 | 来源:发表于2018-08-12 21:19 被阅读4次

    Pandas数据结构Dataframe:基本概念及创建

    二维数组"Dataframe:是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值、字符串、布尔值等。
    Dataframe中的数据以一个或多个二维块存放,不是列表、字典或一维数组结构。
    # Dataframe 数据结构
    # Dataframe是一个表格型的数据结构,“带有标签的二维数组”。
    # Dataframe带有index(行标签)和columns(列标签)
    
    data = {'name':['Jack','Tom','Mary'],
            'age':[18,19,20],
           'gender':['m','m','w']}
    frame = pd.DataFrame(data)
    frame_1 = pd.DataFrame(data,index=range(1,4))
    print("1".center(40,'*'))
    print(frame) 
    print("2".center(40,'*'))
    print(frame_1)
    print("3".center(40,'*'))
    print(type(frame))
    print("4".center(40,'*'))
    print(frame.index,'\n该数据类型为:',type(frame.index))
    print("5".center(40,'*'))
    print(frame.columns,'\n该数据类型为:',type(frame.columns))
    print("5".center(40,'*'))
    print(frame.values,'\n该数据类型为:',type(frame.values))
    # # 查看数据,数据类型为dataframe
    # .index查看行标签
    # .columns查看列标签
    # .values查看值,数据类型为ndarray
    # 执行结果
    *******************1********************
       name  age gender
    0  Jack   18      m
    1   Tom   19      m
    2  Mary   20      w
    *******************2********************
       name  age gender
    1  Jack   18      m
    2   Tom   19      m
    3  Mary   20      w
    *******************3********************
    <class 'pandas.core.frame.DataFrame'>
    *******************4********************
    RangeIndex(start=0, stop=3, step=1) 
    该数据类型为: <class 'pandas.core.indexes.range.RangeIndex'>
    *******************5********************
    Index(['name', 'age', 'gender'], dtype='object') 
    该数据类型为: <class 'pandas.core.indexes.base.Index'>
    *******************5********************
    [['Jack' 18 'm']
     ['Tom' 19 'm']
     ['Mary' 20 'w']] 
    该数据类型为: <class 'numpy.ndarray'>
    
    # Dataframe 创建方法一:由数组/list组成的字典
    # 创建方法:pandas.Dataframe()
    
    data_1 = {'a':[1,2,3],
            'b':[3,4,5],
            'c':[5,6,7]}
    data_2 = {'one':np.random.rand(3),
            'two':np.random.rand(3)}   # 这里如果尝试  'two':np.random.rand(4) 会怎么样?
    print("1".center(40,'*'))
    print(data_1)
    print("2".center(40,'*'))
    print(data_2)
    
    df_1 = pd.DataFrame(data_1)
    df_2 = pd.DataFrame(data_2)
    print("3".center(40,'*'))
    print(df_1)
    print("4".center(40,'*'))
    print(df_2)
    # 由数组/list组成的字典 创建Dataframe,columns为字典key,index为默认数字标签
    # 字典的值的长度必须保持一致!
    
    df_1 = pd.DataFrame(data_1, columns = ['b','c','a','d'])
    print("5".center(40,'*'))
    print(df_1)
    df_1 = pd.DataFrame(data_1, columns = ['b','c'])
    print("6".center(40,'*'))
    print(df_1)
    # columns参数:可以重新指定列的顺序,格式为list,如果现有数据中没有该列(比如'd'),则产生NaN值
    # 如果columns重新指定时候,列的数量可以少于原数据
    
    df_2 = pd.DataFrame(data2, index = ['f1','f2','f3'])  # 这里如果尝试  index = ['f1','f2','f3','f4'] 会怎么样?
    print("7".center(40,'*'))
    print(df_2)
    # index参数:重新定义index,格式为list,长度必须保持一致
    #执行结果
    *******************1********************
    {'a': [1, 2, 3], 'b': [3, 4, 5], 'c': [5, 6, 7]}
    *******************2********************
    {'one': array([0.20993819, 0.38338562, 0.64550572]), 'two': array([0.28085973, 0.99260134, 0.74315454])}
    *******************3********************
       a  b  c
    0  1  3  5
    1  2  4  6
    2  3  5  7
    *******************4********************
            one       two
    0  0.209938  0.280860
    1  0.383386  0.992601
    2  0.645506  0.743155
    *******************5********************
       b  c  a    d
    0  3  5  1  NaN
    1  4  6  2  NaN
    2  5  7  3  NaN
    *******************6********************
       b  c
    0  3  5
    1  4  6
    2  5  7
    *******************7********************
             one       two
    f1  0.404180  0.073073
    f2  0.148756  0.285181
    f3  0.244382  0.077084
    
    # 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("1".center(40,'+'))
    print(data1)
    print("2".center(40,'+'))
    print(data2)
    df1 = pd.DataFrame(data1)
    df2 = pd.DataFrame(data2)
    print("3".center(40,'+'))
    print(df1)
    print("4".center(40,'+'))
    print(df2)
    # 由Seris组成的字典 创建Dataframe,columns为字典key,index为Series的标签(如果Series没有指定标签,则是默认数字标签)
    # Series可以长度不一样,生成的Dataframe会出现NaN值
    #执行结果
    +++++++++++++++++++1++++++++++++++++++++
    {'one': 0    0.208377
    1    0.880316
    dtype: float64, 'two': 0    0.570044
    1    0.564635
    2    0.691983
    dtype: float64}
    +++++++++++++++++++2++++++++++++++++++++
    {'one': a    0.246907
    b    0.847142
    dtype: float64, 'two': a    0.919989
    b    0.115845
    c    0.800938
    dtype: float64}
    +++++++++++++++++++3++++++++++++++++++++
            one       two
    0  0.208377  0.570044
    1  0.880316  0.564635
    2       NaN  0.691983
    +++++++++++++++++++4++++++++++++++++++++
            one       two
    a  0.246907  0.919989
    b  0.847142  0.115845
    c       NaN  0.800938
    
    # Dataframe 创建方法三:通过二维数组直接创建
    
    ar = np.random.rand(9).reshape(3,3)
    print("1".center(40,'*'))
    print(ar)
    df1 = pd.DataFrame(ar)
    df2 = pd.DataFrame(ar, index = ['a', 'b', 'c'], columns = ['one','two','three'])  # 可以尝试一下index或columns长度不等于已有数组的情况
    print("2".center(40,'*'))
    print(df1)
    print("3".center(40,'*'))
    print(df2)
    # 通过二维数组直接创建Dataframe,得到一样形状的结果数据,如果不指定index和columns,两者均返回默认数字格式
    # index和colunms指定长度与原数组保持一致
    
    #执行结果
    *******************1********************
    [[0.89541404 0.24214137 0.21055711]
     [0.15135701 0.96419989 0.11586075]
     [0.06456592 0.26280503 0.77973115]]
    *******************2********************
              0         1         2
    0  0.895414  0.242141  0.210557
    1  0.151357  0.964200  0.115861
    2  0.064566  0.262805  0.779731
    *******************3********************
            one       two     three
    a  0.895414  0.242141  0.210557
    b  0.151357  0.964200  0.115861
    c  0.064566  0.262805  0.779731
    
    # Dataframe 创建方法四:由字典组成的列表
    
    data = [{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
    print("1".center(40,'*'))
    print(data)
    df1 = pd.DataFrame(data)
    df2 = pd.DataFrame(data, index = ['a','b'])
    df3 = pd.DataFrame(data, columns = ['one','two'])
    print("2".center(40,'*'))
    print(df1)
    print("3".center(40,'*'))
    print(df2)
    print("4".center(40,'*'))
    print(df3)
    # 由字典组成的列表创建Dataframe,columns为字典的key,index不做指定则为默认数组标签
    # colunms和index参数分别重新指定相应列及行标签
    #执行结果
    *******************1********************
    [{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
    *******************2********************
       one  three  two
    0    1    NaN    2
    1    5   20.0   10
    *******************3********************
       one  three  two
    a    1    NaN    2
    b    5   20.0   10
    *******************4********************
       one  two
    0    1    2
    1    5   10
    
    # Dataframe 创建方法五:由字典组成的字典
    
    data = {'Jack':{'math':90,'english':89,'art':78},
           'Marry':{'math':82,'english':95,'art':92},
           'Tom':{'math':78,'english':67}}
    df1 = pd.DataFrame(data)
    print("1".center(40,'*'))
    print(df1)
    # 由字典组成的字典创建Dataframe,columns为字典的key,index为子字典的key
    
    df2 = pd.DataFrame(data, columns = ['Jack','Tom','Bob'])
    df3 = pd.DataFrame(df1,index=['a','b','c'])
    print("2".center(40,'*'))
    print(df2)
    print("3".center(40,'*'))
    print(df3)
    # columns参数可以增加和减少现有列,如出现新的列,值为NaN
    # index在这里和之前不同,并不能改变原有index,如果指向新的标签,值为NaN (非常重要!)
    #执行结果
    *******************1********************
             Jack  Marry   Tom
    art        78     92   NaN
    english    89     95  67.0
    math       90     82  78.0
    *******************2********************
             Jack   Tom  Bob
    art        78   NaN  NaN
    english    89  67.0  NaN
    math       90  78.0  NaN
    *******************3********************
       Jack  Marry  Tom
    a   NaN    NaN  NaN
    b   NaN    NaN  NaN
    c   NaN    NaN  NaN
    

    相关文章

      网友评论

          本文标题:pandas学习-4

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