Pandas DataFrame の基本
・DataFrame から新たな DataFrame インスタンスが作られる
・2次元=DataFrame , 1次元=Series (ラベルつけられるので辞書にも似ている)
・DataFrame への値の代入、置換は loc , iloc , ix , at , iat を使う
・query() は条件抽出して新たな DataFrame を作る。代入や置換はできない。
test.csv
name,id,color,age
taro,11,blue,10
hanako,12,red,20
ken,13,blue,30
サンプルコード
# coding: utf-8
import pandas as pd
df = pd.read_csv('test.csv')
print(df)
print("-"*30)
# 行列に行列を追加 (新しいDataFrame インスタンスが生成される)
df2 = df.append(df)
print(df2)
# loc で列を指定して取得
print(df.loc[:, "name"]) # Series
# 列を指定せず全部とってくる
print(df.loc[:, ]) # df.loc[:,:] でもよい
# loc で列を指定して Series を取得
print(df.loc[:, ["name", "age"]])
# boolean で指定 ( Series と連携して多用する )
print(df.loc[[True, False, True], ])
# iloc で index 指定して取得 -1,-2のように後ろから指定できる
print(df.iloc[-2:, ])
# ------------------------------
# 条件抽出
print(df['age'] < 25) # Series
print(df[df['age'] < 25]) # DataFrame
# query で取得 (必ず新しいDFが返される)
print(df.query('age < 25')) # DataFrame
value = 25
print(df.query('age < @value')) # DataFrame (変数を参照する)
# 条件抽出して loc で抽出したindexを指定して "age"に値を代入
df_query = df.query('age > 15')
df.loc[df_query.index, "age"] = 100
# df.loc[df_query.index] = 100 # カラムを指定しない場合は全部書き変わる
# 文字列を含むデータを抽出
a_series = df['name'].str.contains('a') # Seriesを取得 (bool一覧が返される)
a_df = df[df['name'].str.contains('a')] # DataFrameに変換
print(df.loc[a_series]) # a_series で抽出
print(df.loc[a_df.index]) # index でも抽出できる
print(df.loc[~a_series]) # 抽出内容を~(NOT)演算子で反転
行の追加 append
append は戻り値で新しいインスタンスを返す
~ 演算子を使う意味: ビット反転(NOT)
0010 => 1101
True , False をもつ1次元(Series)を利用して条件抽出を行う際に結果を反転できる
pandas の loc、iloc、ix の違い
loc 行ラベル、 列ラベル
iloc 行の番号、列の番号
ix 行ラベル、列ラベル or 行の番号、列の番号
http://ailaby.com/lox_iloc_ix/
query で条件抽出して代入
https://qiita.com/kazetof/items/992638be821a617b900a
特定の文字列を含む要素を持つ行を抽出
https://note.nkmk.me/python-pandas-str-contains-match/
pandasで任意の位置の値を取得・変更するat, iat, loc, iloc
https://note.nkmk.me/python-pandas-at-iat-loc-iloc/
pandasのDataFrameのデータ操作をよくわすれるので、よく使用する操作を自分のためにまとめた
https://qiita.com/kakiuchis/items/46ff158295686c0c71cf
json のような入れ子構造を扱う json_normalize
https://qiita.com/simonritchie/items/7e50b47ccadbbb0fba57
Panel: 3次元のデータ
https://www.madopro.net/entry/2016/10/14/022723
3Dソフト (3ds Max、Maya) などで Pandas をつかう場合
mayapy.exe の python は 2.7.11 (64bit)
pip install pandas はできない。numpy が import error になるので、Windows , maya python 用にビルドが必要。
Eric Vignola 氏によって用意された whl でインストールする。
cd C:\Program Files\Autodesk\Maya2019\Python\Scripts
pip install "numpy-1.13.1+mkl-cp27-none-win_amd64.whl" --user
pip install pandas-0.20.3-cp27-none-win_amd64.whl --user
numpy を Window 10 + Maya 2018 にインストールする
https://qiita.com/syoyo/items/8b578a6637b90ba2061a
Numpy 1.13.1 + Scipy 0.19.1 for Maya 2018
https://forums.autodesk.com/t5/maya-programming/numpy-1-13-1-scipy-0-19-1-for-maya-2018/m-p/7362541
Eric Vignola
https://forums.autodesk.com/t5/user/viewprofilepage/user-id/3243401