雑多な技術系メモ

自分用のメモ。内容は保証しません。よろしくお願いします。

pandasについてのメモ

columnsの入れ替え

df[["D", "C","B","A"]]

データの書き出し

csv

df.to_csv()
df.to_csv("test.csv",index=False)
df2 = pd.read_csv("test.csv", index_col=0)

apply すべてのデータに関数を適用

>>> import pandas as pd
>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
...                       {'a': 100, 'b': 200, 'c': 300, 'd': 400},
...                       {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
>>> df = pd.DataFrame(mydict)
>>> df
      a     b     c     d
0     1     2     3     4
1   100   200   300   400
2  1000  2000  3000  4000

上記の元データに対して、applyを用いてすべてのデータに対して 指定した関数を適用する。

以下例

>>> df.apply(np.sqrt)
           a          b          c          d
0   1.000000   1.414214   1.732051   2.000000
1  10.000000  14.142136  17.320508  20.000000
2  31.622777  44.721360  54.772256  63.245553
>>> df.apply(np.sum,axis=1)
0       10
1     1000
2    10000
dtype: int64

loc

pandasのDataframeの行の抽出する (indexが整数以外の時も使える)

>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
...          index=['cobra', 'viper', 'sidewinder'],
...          columns=['max_speed', 'shield'])
...
>>> df
            max_speed  shield
cobra               1       2
viper               4       5
sidewinder          7       8
>>> df.loc["cobra"]
max_speed    1
shield       2
Name: cobra, dtype: int64

>>> df.loc[["cobra", "viper"]]
       max_speed  shield
cobra          1       2
viper          4       5

iloc

pandasのdataframeの各行を取り出す時に用いる。
iはintengerのi。indexの行数を指定して取り出す documentのサンプルを用いてサンプルコードを示す

>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
                      {'a': 100, 'b': 200, 'c': 300, 'd': 400},
                      {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
>>> df = pd.DataFrame(mydict)
>>> df
      a     b     c     d
0     1     2     3     4
1   100   200   300   400
2  1000  2000  3000  4000

>>> df.iloc[1]     # 二行目を取り出す
a    100
b    200
c    300
d    400
>>> df.iloc[0,1]      # 0行1列の要素を取り出す
2

DataFrameのhistメソッドで各列の情報をヒストグラムとしてプロットする

histメソッドで、各列のseriesのヒストグラムをプロットする。

これもirisのデータを用いてみる。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris

iris = load_iris()
data1 = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                     columns= iris['feature_names'] + ['target'])

# ヒストグラムを表示する
data1.hist(bins=20,figsize=(10,7))

f:id:ttt242242:20190823173913p:plain

value_counts

ユニークな値がどれくらい含まれているかを調べるためのメソッド

irisのデータを用いて試す。
各花のデータ数を見てみる。

import sklearn
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris

# irisのデータの読み込みと、データのDataFrame化
iris = load_iris()
data = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                     columns= iris['feature_names'] + ['target'])

# 各花がどれくらい含まれているかを出力
data["target"].value_counts()
#=> 2.0    50
#   1.0    50
#   0.0    50
#   Name: target, dtype: int64

csvを読み込む。read_csv

import pandas as pd

data = pd.read_csv("test.csv")

csvで保存する

In [57]: data = pd.DataFrame({"A":[5.],"B":[6.]})

In [58]: data.to_csv("test.csv",index=None,header=True)

dataframeオブジェクトにデータを加える

In [44]: data1 = pd.DataFrame({"A":[1.],"B":[2.]})

In [45]: data1
Out[45]: 
     A    B
0  1.0  2.0

In [46]: data2 = pd.DataFrame({"A":[5.],"B":[6.]})

In [47]: data2
Out[47]: 
     A    B
0  5.0  6.0

In [48]: data3 = data1.append(data2)  # 追加する

In [49]: data3
Out[49]: 
     A    B
0  1.0  2.0
0  5.0  6.0

参考文献

10 minutes to pandas — pandas 0.25.1 documentation