読者です 読者をやめる 読者になる 読者になる

Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

pandasの使い方(2) DataFrameの生成

データフレームを作る(1) numpyの配列から作る。

import numpy as np
import pandas as pd
a = np.random.randint(1, 100, (3, 2))
frame = pd.DataFrame(a, columns=["a", "b"])
print(frame)
#     a   b
# 0  85  80
# 1  85  10
# 2  17  38

 

データフレームを作る(2)リストから

import numpy as np
import pandas as pd

d =[[1, 2, 3], 
    [50, 60, 70]]
frame = pd.DataFrame(d)

print(frame)
#     0   1   2
# 0   1   2   3
# 1  50  60  70

print(frame.T)
#    0   1
# 0  1  50
# 1  2  60
#2  3  70

column名(列名)、index名(行名)が自動で割り振られる。
.Tで行列変換(転置)
 

データフレームを作る(3)辞書から

data = {"year": [2010, 2011, 2012, 2013],
        "pref":["千葉", "山口", "岐阜", "東京"]}

f = pd.DataFrame(data)
print(f)
#   pref  year
# 0   千葉  2010
# 1   山口  2011
# 2   岐阜  2012
# 3   東京  2013

 
columnsを指定しないと、昇順になる。
columns指定で、存在しない列はNaNとなる。

f = pd.DataFrame(data, columns=["year", "pref", "count"])
print(f)
#    year pref count
# 0  2010   千葉   NaN
# 1  2011   山口   NaN
# 2  2012   岐阜   NaN
# 3  2013   東京   NaN

 
・ネストした辞書からDataFrameを作ると、外側のキーがcolumnに
 内側のキーが行indexになる。

data = {"year": {"1st":2010, "2nd":2011, "3rd":2012, "4th":2013},
        "pref": {"1st":"千葉", "2nd":"山口", "3rd":"岐阜"}}
f = pd.DataFrame(data)
print(f)
#    pref  year
# 1st   千葉  2010
# 2nd   山口  2011
# 3rd   岐阜  2012
# 4th  NaN  2013

 

データフレームを作る(4)Webから

 こちらの記事
pandasの使い方(4)ファイルの読み込み - Remrinのpython攻略日記
を参照 
 

データフレームを作る(5)コピー

d2 = d.copy()

 

データ構造の確認

# 行数の確認
print(len(frame))    #2

# 次元数の確認
print(frame.shape)   #(2, 3)

# 各列の基礎統計量の確認
print(frame.describe()) #データ数、平均、標準偏差、4分位
#                A          B          C
# count   2.000000   2.000000   2.000000 データ数
# mean   25.500000  31.000000  36.500000 平均
# std    34.648232  41.012193  47.376154 標準偏差
# min     1.000000   2.000000   3.000000 最小
# 25%    13.250000  16.500000  19.750000 
# 50%    25.500000  31.000000  36.500000
# 75%    37.750000  45.500000  53.250000
# max    50.000000  60.000000  70.000000 最大

# 先頭・末端行の表示
print(frame.head(1)) #先頭の1行を確認
#        A  B  C
# order  1  2  3
print(frame.tail(1)) #末端の1行を確認
#         A   B   C
#  point  50  60  70

print(frame.info()) #構造の確認
# <class 'pandas.core.frame.DataFrame'>
# Index: 2 entries, order to point
# Data columns (total 3 columns):
# A    2 non-null int64
# B    2 non-null int64
# C    2 non-null int64
# dtypes: int64(3)
# memory usage: 56.0+ bytes
# None

 

値の確認

d =[[1, 2, 3],[50, 60, 70]]
frame = pd.DataFrame(d)
print(frame.columns) #RangeIndex(start=0, stop=3, step=1)
print(frame.index)   #RangeIndex(start=0, stop=2, step=1)
print(frame.values)  #値のみの表示→NumPyのndarray
# [[ 1  2  3]
#  [50 60 70]]

 
○特定の行、列の取得

f["A"] A列をSeriesとして取り出す
f.A A列をSeriesとして取り出す
f[0:2] 0~2行
f[:2] 0~2行
f["Jan":"Feb"] Jan~Febの行
f.loc["Jan"] Janの行
f.loc[:, ["A", "B"]] AとBの列
f.loc["Jan":"Feb",["A", "B"]] Jan~Febの行のAとB
f.iloc[0] 0行目
f.iloc[0][0] 0行目の0列目
f.iloc[[1, 2],[0, 1]] 1, 2行目の0,1列
f.iloc[1:2, :] 1~2行目のすべての列
f.iloc[:, 0:1] すべての行の0~1列
f[f.A > 5] Aの値が5より大きいすべての行
f.[f > 5] 5より大きいすべての要素、他はNaN
f[f["A"].isin([5, 10])] A列が5の値を持つ行。isinの引数はリスト型

 

data = [[0, 1, 2, 3], 
        [5, 6, 7, 8], 
        [10, 10, 10, 10]]      
f = pd.DataFrame(data)
f.index = ["Jan", "Feb", "Mar"]
f.columns = ["A", "B", "C", "D"]

print(f)
#       A   B   C   D
# Jan   0   1   2   3
# Feb   5   6   7   8
# Mar  10  10  10  10

print(f["A"])
# Jan     0
# Feb     5
# Mar    10
# Name: A, dtype: int64

print(f.A)
# Jan     0
# Feb     5
# Mar    10
# Name: A, dtype: int64

print(f[0:2])
#      A  B  C  D
# Jan  0  1  2  3
# Feb  5  6  7  8

#print(f[0]) # KeyError: 0

print(f["Jan":"Feb"])
# Jan  0  1  2  3
# Feb  5  6  7  8

#print(f["Jan"]) # KeyError: 'Jan'

print(f.loc["Jan"]) # 縦に表示
# A    0
# B    1
# C    2
# D    3
# Name: Jan, dtype: int64

print(f.loc["Jan":"Feb", ["A", "B"]])
#      A  B
# Jan  0  1
# Feb  5  6

print(f[f > 5])
#         A     B     C     D
# Jan   NaN   NaN   NaN   NaN
# Feb   NaN   6.0   7.0   8.0
# Mar  10.0  10.0  10.0  10.0

print(f[f["A"].isin([5, 10])])
#       A   B   C   D
# Feb   5   6   7   8
# Mar  10  10  10  10

 
参考:
Python Pandasでのデータ操作の初歩まとめ
Pandas でデータフレームを作ってみよう