LoginSignup
2
4

More than 3 years have passed since last update.

pandas自習メモ

Posted at
install
#install
pip install pandas

一次元のデータ構造体であるSeries。

Series
# randomで作成
arr = np.random.randn(6)
s1 = pd.Series(arr)

# arangeで作成
arr2 = np.arange(6)
s2 = pd.Series(arr2)

# onesで作成
arr3 = np.ones(6)
s3 = pd.Series(arr3)

# zerosで作成
arr4 = np.zeros(6)
s4 = pd.Series(arr4)

# index指定
arr = np.random.randn(6)
s5 = pd.Series(arr, index=["一月", "二月", "三月", "四月", "五月", "六月"])
#※indexは重複しても大丈夫

# 辞書で作成
dict_data = {"一月": 11, "二月": 13, "三月": 10, "四月": 14, "五月": 8, "六月": 10}
s6 = pd.Series(dict_data)

###############################################
#indexでデータ取得
s6[0]

#keyでデータ取得
s3["一月"]

二次元のデータ構造体であるDataFrame。

DataFrame
import pandas as pd
import numpy as np

#numpyで作成
arr = np.random.randn(20).reshape((4, 5))
df = pd.DataFrame(arr)

# 行、列index指定
index = ["Q1", "Q2", "Q3", "Q4"]
columns = ["A", "B", "C", "D", "E"]
df = pd.DataFrame(arr, index=index, columns=columns)

###################################################
# 使い方
#行取得
df.index
#列取得
df.columns
#データ取得
df.values
#describe取得
df.describe()
#count    データの個数
#unique   ユニークな(一意な)値の個数
#top      最も出現頻度の高い値(最頻値)
#freq     最頻値の出現回数
#mean     平均値
#std      標準偏差
#min      最小値
#25%      1/4分位数
#50%      中央値
#75%      3/4分位数
#max      最大値

#sort
#index並び替え
df.sort_index(axis=0, ascending=False)
#※axis:0行,1列 ascending:true昇順,false降順

#A列で降順
df.sort_values(axis=0, by="A", ascending=False)

#Q3行で昇順
df.sort_values(axis=1, by="Q3", ascending=True)

##############################################
#データ取得
#行データ取得
df.loc["Q3"]
df.loc["Q1":"Q3"]
df.iloc[0]
df.iloc[0:3]

#列データ取得
df.loc[:,"B"]
df.loc["Q2","A":"C"]
df.iloc[:, 0]
df.iloc[0:2, 0:3]

#行列データ取得
df.ix["Q0":"Q2", 1:3]

############################################
#空データ確認
df.isnull()

#空データの行列削除
df.dropna(axis=0, how="any")
#※axis:0行1列 how:"any"あれば削除,"all"全部nanなら削除

#空データを1にする
df.fillna(value=1)

#############################################
#データ結合
# concat方式
pd.concat([df1, df2, df3,...]
           axis=0 or 1
           ignore_index=True
           join="outer" or "inner",  
           join_axes=[data1.index])
#          df1 :DataFrame
#      axis:結合方向
#      ignore_index:indexを並び替え(default:False)
#          join:outer直和 inner和集合
#          join_axes:結合基準データ
index1 = pd.date_range("2018-10-01", periods=4)
df1 = pd.DataFrame(np.arange(20).reshape((4, 5)), index=index1, columns=list("ABCDE"))
index2 = pd.date_range("2018-10-03", periods=3)
df2 = pd.DataFrame(np.arange(12).reshape((3, 4)), index=index2, columns=list("DEFG"))

# axis=0 垂直方向で結合
result = pd.concat([df1, df2], axis=0, sort=True)
# axis=1 水平方向で結合
result2 = pd.concat([df1, df2], axis=1)
# axis=0, join_axes=[df1.columns]
result6 = pd.concat([df1, df2], axis=0, join_axes=[df1.columns], sort=False)
# axis=1, join_axes=[df1.index]
result7 = pd.concat([df1, df2], axis=1, join_axes=[df1.index], sort=False)

#df1.append()方式
df1.append([df2, df2, df3,...],
           axis=0 or 1,
           ignore_index=True)
result8 = df1.append(df2, ignore_index=True, sort=False)

#pd.merge()方式
pd.merge(left, right,
         on=["key1", "key2"],
         how="inner" or "outer" or "left" or"right"
         indicator="説明")

left = pd.DataFrame({
    "key": ["A0", "A1", "A2", "A3"],
    "B": ["B0", "B1", "B2", "B3"],
    "C": ["C0", "C1", "C2", "C3"],
})

right = pd.DataFrame({
    "key": ["A0", "A1", "A2", "A3"],
    "D": ["B1", "B2", "B2", "B4"],
    "E": ["C2", "C1", "C5", "C2"]
})

# "key"で結合
result9 = pd.merge(left, right, on="key")
result10 = pd.merge(left, right, on=["key", "B"])

result11 = pd.merge(left, right, on=["key", "B"])
result12 = pd.merge(left, right, on=["key", "B"], how="left")
result11 = pd.merge(left, right, on=["key", "B"], how="right")
#how = left:leftを全部保留で結合

################################################
#データのoutput
left = pd.DataFrame({
    "key": ["A0", "A1", "A2", "A3"],
    "B": ["B0", "B1", "B2", "B3"],
    "C": ["C0", "C1", "C2", "C3"],
})
# csv
left.to_csv("left_data.csv")
# json
left.to_json("left.json")
#そのほか
#to_json,to_excel,to_csv,to_clipboard,
#to_dense,to_dict,to_feather,to_gbq,
#to_hdf,to_html,to_latex,to_msgpack,
#to_panel,to_parquet,to_pickle,to_records
#to_sparse,to_sql,to_stata

#########################################
#グラフ
import matplotlib.pyplot as plt
s = pd.Series(np.random.randn(1000))
result = s.cumsum()
result.plot()
plt.show()


2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4