■Pandasの列順変更


■Pandas のdfを CSVやテキストファイルに出力

日本語の文字列を含んだデータセットを出力する場合は以下のように、encoding="<文字コード名>" を引数に指定します。

■pandas.DataFrameのforループ処理(イテレーション)

pandas.DataFrameをfor文でループ処理(イテレーション)する場合、単純にそのままfor文で回すと列名が返ってくる。繰り返し処理のためのメソッドiteritems(), iterrows()などを使うと、1列ずつ・1行ずつ取り出せる。

■データフレーム1行ごとに複雑な処理を実行 -apply()

for文もapply()も処理の書き方自体はあまり変わらないのに、なぜわざわざapply()を使うのでしょうか。その秘密は処理速度にあります。例のような数件のデータであれば差はほとんどありませんが、数万、数十万件を処理する場合では両者に大きな差が出てきます。大量データの処理時にはapply()を検討ください。

■PandasのDataFrameから値を取り出す色んな方法

データを取り出す方法はloc, iloc, ixがあり、それぞれ行、列の指定方法が違う。
 loc: 行ラベル、 列ラベル
 iloc: 行の番号(0 ~ )、列の番号(0 ~ )
 ix: 行ラベル、列ラベル または 行の番号(0 ~ )、列の番号(0 ~ )
ix最強感ありますが、pandasのversionが0.20.1.以降しか使えないようです。

 

■pandasで特定文字列含む行抽出(完全一致、部分一致)


特定の文字列と完全一致: ==, isin()

==を使うと、指定文字列と完全一致する要素がTrueのpandas.Seriesを取得できる。

print(df['state'] == 'CA')
# 0    False
# 1     True
# 2     True
# Name: state, dtype: bool
print(df[df['state'] == 'CA'])
#       name  age state  point
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70

■DataFrame / Series からリストに変換

データ解析にはDataFrameやSeriesが非常に有用ですが、場合によっては最も単純なデータ形式であるリスト形式が必要になる場面もあります。DataFrameからリストとして取得したいデータをSeriesとして抽出してから、Seriesのto_listメソッドを用いることでリストに変換できます。

 

・特定の列をリストに変換する
import pandas as pd 
df = pd.read_excel('https://biotech-lab.org/wp-content/uploads/2020/03/dataframe-sample-01.xlsx')
list_sample = df['名前'].to_list()
print(list_sample)  #['田中一郎', '佐藤花子', '高橋太郎', '橋本清']

・特定の行をリストに変換する
import pandas as pd 
df = pd.read_excel('https://biotech-lab.org/wp-content/uploads/2020/03/dataframe-sample-01.xlsx')
list_sample = df.iloc[3].to_list()
print(list_sample)  #['橋本清', '男', 41, '自営業']

 

■Pythonリスト要素のインデックス(何番目か)を取得
出典


重複する要素のすべてのインデックスを取得
リストの要素が重複する場合、index()メソッドは最初のインデックスのみを返す。
すべてのインデックス取得には、組込関数enumerate()とリスト内包表記を利用。
一つだけの要素に対しては要素数一個のリストを返し、

存在しない要素に対しては空のリストを返す。

l = [10, 30, 10, 10, 20, 20]
print([i for i, x in enumerate(l) if x == 10]) # [0, 2, 3]
print([i for i, x in enumerate(l) if x == 20]) # [4, 5]
print([i for i, x in enumerate(l) if x == 30]) # [1]
print([i for i, x in enumerate(l) if x == 100]) # []