Python-Pandas学習のデータフレーム(Dataframe)


データフレーム(Dataframe)は、行列スタイルのデータテーブルで、ソートされた列のセットを含み、各列は異なる値タイプ(数値、文字列、ブール値など)であってもよい.
データ・フレームには、同じインデックスを共有するSeries辞書として扱われるロー・インデックスとカラム・インデックスがあります.
次に、データフレームを作成する方法と、いくつかの基本的な操作を示します.
import pandas as pd

data = {
    'platform': ['qq', 'weixin', 'weibo', 'taobao'],
    'year': [2000, 2010, 2005, 2004],
    'percent': [0.71, 0.89, 0.63, 0.82]
}
df = pd.DataFrame(data)
print(df)
#  
      platform  year  percent
    0       qq  2000     0.71
    1   weixin  2010     0.89
    2    weibo  2005     0.63
    3   taobao  2004     0.82

#       excel  ,         

print(df.head()) #      ,         


#              
data = {
    'platform': ['qq', 'weixin', 'weibo', 'taobao'],
    'year': [2000, 2010, 2005, 2004],
    'percent': [0.71, 0.89, 0.63, 0.82]
}
columns = ['year', 'platform', 'percent']
df = pd.DataFrame(data, columns=columns) #                 
print(df)
#  
       year platform  percent
    0  2000       qq     0.71
    1  2010   weixin     0.89
    2  2005    weibo     0.63
    3  2004   taobao     0.82



#           ,         NaN  
data = {
    'platform': ['qq', 'weixin', 'weibo', 'taobao'],
    'year': [2000, 2010, 2005, 2004],
    'percent': [0.71, 0.89, 0.63, 0.82]
}
columns = ['year', 'platform', 'percent', 'count']
index = ['a', 'b', 'c', 'd']
df = pd.DataFrame(data, columns=columns, index=index) #              ,    NaN    
print(df)
#  
       year platform  percent count
    a  2000       qq     0.71   NaN
    b  2010   weixin     0.89   NaN
    c  2005    weibo     0.63   NaN
    d  2004   taobao     0.82   NaN


print(df['year']) #                    ,    Series  
#  
    a    2000
    b    2010
    c    2005
    d    2004
    Name: year, dtype: int64

print(df.platform) #           .        
#  
    a        qq
    b    weixin
    c     weibo
    d    taobao
    Name: platform, dtype: object

print(df.loc['a']) #  index ‘a’  
#  
    year        2000
    platform      qq
    percent     0.71
    count        NaN
    Name: a, dtype: object

#   ‘count’  NaN,            
df['count'] = 5000
print(df)
#  
       year platform  percent  count
    a  2000       qq     0.71   5000
    b  2010   weixin     0.89   5000
    c  2005    weibo     0.63   5000
    d  2004   taobao     0.82   5000

#         ,     ,     ,                      ,     
df['count'] = [x*1000 for x in range(1, 5)]
print(df)
#  
       year platform  percent  count
    a  2000       qq     0.71   1000
    b  2010   weixin     0.89   2000
    c  2005    weibo     0.63   3000
    d  2004   taobao     0.82   4000

#            ,       index,     index,       NaN
ser = pd.Series([1000, 3000], index=['a', 'c'])
df['count'] = ser
print(df)
#  
       year platform  percent   count
    a  2000       qq     0.71  1000.0
    b  2010   weixin     0.89     NaN
    c  2005    weibo     0.63  3000.0
    d  2004   taobao     0.82     NaN

#       
df['check'] = df.platform == 'weixin'
print(df)
#  
       year platform  percent count  check
    a  2000       qq     0.71   NaN  False
    b  2010   weixin     0.89   NaN   True
    c  2005    weibo     0.63   NaN  False
    d  2004   taobao     0.82   NaN  False

#       
del df['check']
print(df)
#  
       year platform  percent count
    a  2000       qq     0.71   NaN
    b  2010   weixin     0.89   NaN
    c  2005    weibo     0.63   NaN
    d  2004   taobao     0.82   NaN

#  ,           ,       ,     ,              ,         


#  T     
df = df.T
print(df)
#  
                 a       b      c       d
    year      2000    2010   2005    2004
    platform    qq  weixin  weibo  taobao
    percent   0.71    0.89   0.63    0.82
    count      NaN     NaN    NaN     NaN


#          
df.index.name = 'hello'
df.columns.name = 'world'
print(df)
#  
    world  year platform  percent count
    hello                              
    a      2000       qq     0.71   NaN
    b      2010   weixin     0.89   NaN
    c      2005    weibo     0.63   NaN
    d      2004   taobao     0.82   NaN


#     values  ,              :
print(df.values)
#  
    [[2000 'qq' 0.71 nan]
     [2010 'weixin' 0.89 nan]
     [2005 'weibo' 0.63 nan]
     [2004 'taobao' 0.82 nan]]



 
索引オブジェクト
pandasのインデックスオブジェクトは、軸ラベルやその他のメタデータを格納するために使用され、構築時にインデックスとして配列を渡すことができます.
obj = pd.Series(range(3), index=['a', 'b', 'c'])
index = obj.index
print(index)
#  
    Index(['a', 'b', 'c'], dtype='object')

print(index[1:])
#  
    Index(['b', 'c'], dtype='object')

#       ,      
#            ,    index=['a', 'b', 'c', 'a']   

インデックス・オブジェクトで使用できるいくつかの方法:
append#追加のインデックスオブジェクトを元のインデックスに貼り付けると、新しいインデックスが生成されます.
difference#2つのインデックスの差セットを計算
intersection#2つのインデックスの交差を計算
union#2つのインデックスの並列セットを計算
isin#は、各値が転送コンテナ内のブール配列にあるかどうかを示します.
delete#位置iの要素を削除し、新しいインデックスを生成
insert#は、位置iに要素を挿入し、新しいインデックスを生成します.
is_monotonic#インデックスシーケンスが増分された場合はTrueを返します
is_Unique#インデックス・シーケンスが一意の場合はTrueを返します.
Unique#インデックスの一意値シーケンスを計算する
 
DataFrame索引オプション
# df  Dataframe     

# df         :
df[val]  

#      df    :
df.loc[val]  

#      df    
df.loc[[val1, val2, val3]] 


#      df    
df.loc[:, val]

#      df    
df.loc[:, [val1, val2, val2]]


#            
df.loc[row, col]

#             
df.iloc[where]

#             
df.iloc[:, where]

#           
df.iloc[where_row, where_col]

#   、          
df.at[label_row, label_col]

#   、            
df.iat[row, col]

#         ,          
reindex()

#             
get_value, set_value

DataFrameのいくつかの加減算などの方法では、演算子操作を直接使用すると、いくつかのNaN値が表示されます.例えば、df 1には「b」という列があり、df 2には「b」という列がない場合、df 1+df 2を使用すると、2つのデータフレームがマージされますが、中の「b」列はいずれもNaN値です.この場合がないように、データフレームに付属するいくつかの方法を呼び出すことができます.追加のパラメータfill_を渡しますvalue、入力する値を設定してNaNを置き換えます.
add, radd  #  (+)
sub, rsub  #  (-)
div, rdiv  #  (/)
floordiv, rfloordiv  #  (//)
mul, rmul  #  (*)
pow, rpow  #   (**)

#   r     ,        ,        ,    df.rdiv(1)     1/df

Dataframeの適用とマッピング方法
適用とマッピングの方法はそれぞれapply,mapであり,以下に例を示す.
#apply    
#np   Numpy   

import pandas as pd
import numpy as np

df = pd.DataFrame(
    np.random.randn(4, 3), 
    columns=list('bde'), 
    index=['hello', 'world', 'year', 'month']
)
print(df)
#  
              b         d         e
    hello -0.057626 -0.312814 -0.501929
    world -1.574264  0.802262  1.518332
    year   0.090305 -0.154119 -2.288428
    month -1.296728 -0.508496 -0.290008

fdif = lambda x:x.max() - x.min() #       ,            
print(df.apply(fdif)) #       Dataframe  ,     axis            
#  
    b    1.664569
    d    1.310758
    e    3.806759
    dtype: float64

def tempfunc(x):
    return pd.Series([x.min(), x.max()], index =['min', 'max'])
print(df.apply(tempfunc)) #              dataframe   
#  
                b         d         e
    min -0.458097 -0.590140 -1.038616
    max  0.246472  0.900312  1.667914


#           ,      applymap   ,         
format = lambda x: '%.2f' % x #           
print(df.applymap(format))
#  
               b      d      e
    hello   0.47   1.48  -0.60
    world   1.15   1.52  -1.07
    year   -1.39   1.79  -0.33
    month   0.06  -1.90  -1.18

#  applymap     ,   Series   map  ,                   map  
print(df['e'].map(format)) #            
#  
    hello    -1.41
    world    -0.67
    year     -0.84
    month     0.35
    Name: e, dtype: object

DataFrameのソートとランキング方法:
ソートで使用できるsort_index ,sort_values、ランキングはrankを使用できます.
ser = pd.Series(range(4), index=list('dabc'))
print(ser)
#  
    d    0
    a    1
    b    2
    c    3
    dtype: int64

print(ser.sort_index()) #  index    
#  
    a    1
    b    2
    c    3
    d    0
    dtype: int64

#  ,dataframe          
df = pd.DataFrame([[0, 1, 2, 3], [4, 5, 6, 7]], index=['three', 'one'], columns=list('dabc'))
print(df)
#  
           d  a  b  c
    three  0  1  2  3
    one    4  5  6  7

print(df.sort_index()) #   index   
#  
           d  a  b  c
    one    4  5  6  7
    three  0  1  2  3

print(df.sort_index(axis=1)) #       
#  
           a  b  c  d
    three  1  2  3  0
    one    5  6  7  4

print(df.sort_index(axis=1, ascending=False)) #       ,      
#  
           d  c  b  a
    three  0  3  2  1
    one    4  7  6  5

print(df.sort_values(by='b', ascending=False)) #     ,    ,by       
#  
           d  a  b  c
    one    4  5  6  7
    three  0  1  2  3


#        rank
df = pd.DataFrame({ #      DF
    'b': [4.3, 7, -3, 2], 
    'a': [1, 0, 1, 0], 
    'c': [-2, 4, 8, -2.5]
})
print(df)
#  
         b  a    c
    0  4.3  1 -2.0
    1  7.0  0  4.0
    2 -3.0  1  8.0
    3  2.0  0 -2.5

print(df.rank(axis='columns')) #  rank        ,                  
#  
         b    a    c
    0  3.0  2.0  1.0
    1  3.0  1.0  2.0
    2  1.0  2.0  3.0
    3  3.0  2.0  1.0

#rank    method  ,              ,       :
'average'     #  :           
'min'         #          
'max'         #          
'first'       #                ,            ,       ,         ,       
'dense'       #    ‘min’,          1,               

場合によっては、Dataframeでインデックスが重複する場合、すなわち軸インデックスが等しいか、または複数同時に現れる場合があります.is_を使用します.Uniqueは、重複するインデックスが存在するか否かを判断する:df.inde.is_Unique、これはTrueまたはFalseを返します.
インデックスが重複している場合、私たちが値を取ると、このインデックスの行はすべて取り出され、結果はdfを返しますが、一意のインデックスだけがある場合は、単一の数値またはシーケンスを返します.
 
DataFrame記述統計の概要と計算
私たちが前に言ったapplyのように、実はDFにはすでに多くの関数があります.例えば、和を求める、平均値を求める、分散を求めるなど、基本的な統計方法が含まれています.