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