上流SEが久しぶりに開発してみる日記

マネジメント専任システムエンジニアがなれないプログラミングをしてみる日記です。

python 基礎 データフレームからの抽出~応用編~

データフレームからのデータ抽出の応用編です。

データフレームからのデータ抽出の応用編です。 まずは、2つのデータフレームを用いた抽出です。

2つのデータフレームで特定のキーが同じものだけを抽出します。

import pandas as pd
import numpy as np


#データフレームから必要なデータを抽出する方法を整理します。

#データを作る
data = [["A0","B0","C0",0],["A1","B1","C1",1],["A2","B2","C2",2]]
df1 = pd.DataFrame(data=data, columns=['A','B','C','D'])
print("df1")
print(df1)

data2 = [["A2","E2","F2",10],["A3","E3","F3",20],["A4","E4","F4",30]]
df2 = pd.DataFrame(data=data2, columns=['A','E','F','G'])
print("df2")
print(df2)
df1
    A   B   C  D
0  A0  B0  C0  0
1  A1  B1  C1  1
2  A2  B2  C2  2
df2
    A   E   F   G
0  A2  E2  F2  10
1  A3  E3  F3  20
2  A4  E4  F4  30

df2と同じAのキーをもつdf1を抽出 ここではAをキーとします。

df1[df1['A'].isin(df2['A'])]
A B C D
2 A2 B2 C2 2

df2と同じAのキーを持たないdf1を抽出 ここでもAをキーとします。(差分抽出)

df1[~df1['A'].isin(df2['A'])]
A B C D
0 A0 B0 C0 0
1 A1 B1 C1 1

特定の文字列(複数)を含むデータを抽出 ここでは、df1のA列に1を含む/含まないデータの抽出

print("対象を含むデータの抽出")
print(df1[df1['A'].str.contains('1')])

print("対象を含まないデータの抽出")
print(df1[~df1['A'].str.contains('1')])
対象を含むデータの抽出
    A   B   C  D
1  A1  B1  C1  1
対象を含まないデータの抽出
    A   B   C  D
0  A0  B0  C0  0
2  A2  B2  C2  2

特定の文字列(複数)を含むデータを抽出 ここでは、df1のA列に0または1を含む/含まないデータの抽出

#検索したい文字列のリスト
stringlist = ["0","1"]

indexlist = []

#検索したい文字列を1件ずつループ。含まれていた場合のインデックスをリストに追加していく。
for i in range(len(stringlist)):
    indexlist.extend(df1.index[df1['A'].str.contains(stringlist[i])].tolist())

#出力したリストをそのまま使うと重複あるので、重複排除して、ソート。
#unique使うと勝手にソートされてしまうが、今回は好都合。
label_list = np.unique(indexlist).tolist()

print("対象を含むデータの抽出")
print(df1.reindex(index=label_list))

print("対象を含まないデータの抽出")
print(df1.drop(index=label_list))
対象を含むデータの抽出
    A   B   C  D
0  A0  B0  C0  0
1  A1  B1  C1  1
対象を含まないデータの抽出
    A   B   C  D
2  A2  B2  C2  2