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