[Python] Pandas – CSVから値を検索する方法
Pandasを使用してCSVファイルから値を検索するには、まずpandas.read_csv()
でCSVファイルを読み込み、データフレームに変換します。
特定の値を検索するには、DataFrame
の条件式を使います。
例えば、特定の列で値を検索する場合、df[df['列名'] == '検索値']
のように記述します。
また、DataFrame.query()メソッド
を使ってSQLライクなクエリで検索することも可能です。
CSVファイルから値を検索する基本的な方法
PythonのPandasライブラリを使用すると、CSVファイルから特定の値を簡単に検索できます。
以下では、基本的な検索方法をいくつか紹介します。
特定の列から値を検索する
特定の列に対して値を検索するには、DataFrameの列を指定して条件を設定します。
以下のサンプルコードでは、age
列が30の行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# age列が30の行を検索する
result = df[df['age'] == 30]
print(result)
name age
0 John 30
1 Alice 30
複数条件で値を検索する
複数の条件を組み合わせて検索することも可能です。
以下の例では、age
が30で、city
が’Tokyo’の行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageが30かつcityが'Tokyo'の行を検索する
result = df[(df['age'] == 30) & (df['city'] == 'Tokyo')]
print(result)
name age city
0 John 30 Tokyo
部分一致で値を検索する
文字列の部分一致を検索するには、str.contains()メソッド
を使用します。
以下の例では、name
列に’J’を含む行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# name列に'J'を含む行を検索する
result = df[df['name'].str.contains('J')]
print(result)
name age city
0 John 30 Tokyo
複数列にまたがる条件で検索する
複数の列にまたがる条件で検索することもできます。
以下の例では、age
が30またはcity
が’Osaka’の行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageが30またはcityが'Osaka'の行を検索する
result = df[(df['age'] == 30) | (df['city'] == 'Osaka')]
print(result)
name age city
0 John 30 Tokyo
1 Mike 25 Osaka
インデックスを使った検索
インデックスを使用して特定の行を検索することもできます。
以下の例では、インデックスが1の行を取得します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# インデックスが1の行を取得する
result = df.loc[1]
print(result)
name Alice
age 30
city Tokyo
Name: 1, dtype: object
これらの基本的な検索方法を使うことで、CSVファイルから必要なデータを効率的に抽出することができます。
条件に基づく高度な検索方法
Pandasでは、より高度な検索を行うための便利なメソッドが用意されています。
以下では、これらのメソッドを使った検索方法を紹介します。
query()メソッドを使った検索
query()メソッド
を使用すると、条件を文字列として指定して検索できます。
以下の例では、age
が30以上の行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageが30以上の行を検索する
result = df.query('age >= 30')
print(result)
name age city
0 John 30 Tokyo
1 Alice 30 Tokyo
正規表現を使った検索
正規表現を使用して、より柔軟な検索が可能です。
以下の例では、name
列に数字を含む行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# name列に数字を含む行を検索する
result = df[df['name'].str.contains(r'\d', regex=True)]
print(result)
name age city
(該当する行がない場合)
isin()メソッドを使った検索
isin()メソッド
を使用すると、特定の値のリストに含まれる行を検索できます。
以下の例では、city
が’Tokyo’または’Osaka’の行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# cityが'Tokyo'または'Osaka'の行を検索する
result = df[df['city'].isin(['Tokyo', 'Osaka'])]
print(result)
name age city
0 John 30 Tokyo
1 Mike 25 Osaka
str.contains()を使った部分一致検索
str.contains()メソッド
を使って、特定の文字列を含む行を検索することができます。
以下の例では、city
列に’k’を含む行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# city列に'k'を含む行を検索する
result = df[df['city'].str.contains('k')]
print(result)
name age city
0 John 30 Tokyo
between()を使った範囲検索
between()メソッド
を使用すると、数値の範囲に基づいて行を検索できます。
以下の例では、age
が20から30の範囲にある行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageが20から30の範囲にある行を検索する
result = df[df['age'].between(20, 30)]
print(result)
name age city
1 Mike 25 Osaka
0 John 30 Tokyo
これらの高度な検索方法を活用することで、データの抽出がさらに効率的に行えるようになります。
検索結果の操作
検索結果を得た後、その結果をどのように操作するかが重要です。
以下では、検索結果の操作方法について説明します。
検索結果を新しいDataFrameとして保存する
検索結果を新しいDataFrameとして保存することで、元のデータを変更せずに結果を利用できます。
以下の例では、age
が30以上の行を新しいDataFrameに保存します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageが30以上の行を検索し、新しいDataFrameに保存する
result_df = df[df['age'] >= 30]
print(result_df)
name age city
0 John 30 Tokyo
1 Alice 30 Tokyo
検索結果をCSVファイルに書き出す
検索結果をCSVファイルに書き出すことで、他のアプリケーションで利用することができます。
以下の例では、age
が30以上の行をresult.csv
というファイルに書き出します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageが30以上の行を検索する
result = df[df['age'] >= 30]
# 検索結果をCSVファイルに書き出す
result.to_csv('result.csv', index=False)
検索結果の特定の列だけを抽出する
検索結果から特定の列だけを抽出することも可能です。
以下の例では、age
が30以上の行からname
列だけを抽出します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageが30以上の行を検索し、name列だけを抽出する
result = df[df['age'] >= 30]['name']
print(result)
0 John
1 Alice
Name: name, dtype: object
検索結果の行数や列数を確認する
検索結果の行数や列数を確認するには、shape
属性を使用します。
以下の例では、age
が30以上の行の行数と列数を表示します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageが30以上の行を検索する
result = df[df['age'] >= 30]
# 検索結果の行数と列数を確認する
print("行数:", result.shape[0])
print("列数:", result.shape[1])
行数: 2
列数: 3
これらの操作を通じて、検索結果を効果的に活用し、データ分析を進めることができます。
応用例:複雑な条件での検索
Pandasを使用すると、複雑な条件での検索が可能です。
以下では、さまざまな条件を組み合わせた検索方法を紹介します。
複数の列にまたがるAND条件・OR条件の検索
複数の列にまたがるAND条件やOR条件を使用して、特定の行を検索できます。
以下の例では、age
が30以上かつcity
が’Tokyo’の行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageが30以上かつcityが'Tokyo'の行を検索する
result_and = df[(df['age'] >= 30) & (df['city'] == 'Tokyo')]
print(result_and)
# ageが30以上またはcityが'Osaka'の行を検索する
result_or = df[(df['age'] >= 30) | (df['city'] == 'Osaka')]
print(result_or)
name age city
0 John 30 Tokyo
name age city
0 John 30 Tokyo
1 Mike 25 Osaka
特定の文字列を含む行を検索する
特定の文字列を含む行を検索するには、str.contains()メソッド
を使用します。
以下の例では、name
列に’J’を含む行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# name列に'J'を含む行を検索する
result = df[df['name'].str.contains('J')]
print(result)
name age city
0 John 30 Tokyo
数値範囲に基づく検索
数値の範囲に基づいて行を検索するには、between()メソッド
を使用します。
以下の例では、age
が20から30の範囲にある行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageが20から30の範囲にある行を検索する
result = df[df['age'].between(20, 30)]
print(result)
name age city
1 Mike 25 Osaka
0 John 30 Tokyo
欠損値を含む行の検索
欠損値を含む行を検索するには、isnull()メソッド
を使用します。
以下の例では、age
列に欠損値がある行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# age列に欠損値がある行を検索する
result = df[df['age'].isnull()]
print(result)
name age city
(該当する行がない場合)
日付データを使った検索
日付データを使った検索には、Pandasのto_datetime()メソッド
を使用して日付を変換し、条件を設定します。
以下の例では、date
列が2023年1月1日以降の行を検索します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# date列を日付型に変換する
df['date'] = pd.to_datetime(df['date'])
# dateが2023年1月1日以降の行を検索する
result = df[df['date'] >= '2023-01-01']
print(result)
name age city date
0 John 30 Tokyo 2023-01-05
これらの応用例を通じて、複雑な条件での検索が可能であることがわかります。
これにより、データ分析の幅が広がります。
応用例:検索結果の可視化
データ分析の結果を可視化することで、データの理解が深まり、洞察を得やすくなります。
以下では、検索結果を可視化する方法をいくつか紹介します。
検索結果をグラフにプロットする
PandasとMatplotlibを使用して、検索結果をグラフにプロットできます。
以下の例では、age
が30以上の人のname
とage
を棒グラフで表示します。
import pandas as pd
import matplotlib.pyplot as plt
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageが30以上の行を検索する
result = df[df['age'] >= 30]
# 検索結果を棒グラフにプロットする
plt.bar(result['name'], result['age'])
plt.xlabel('名前')
plt.ylabel('年齢')
plt.title('年齢が30以上の人')
plt.show()
(グラフが表示されます)
検索結果の統計情報を表示する
検索結果の統計情報を表示することで、データの概要を把握できます。
以下の例では、age
が30以上の人の年齢の平均、中央値、最大値、最小値を表示します。
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageが30以上の行を検索する
result = df[df['age'] >= 30]
# 検索結果の統計情報を表示する
statistics = result['age'].describe()
print(statistics)
count 2.000000
mean 30.000000
std 0.000000
min 30.000000
25% 30.000000
50% 30.000000
75% 30.000000
max 30.000000
Name: age, dtype: float64
検索結果をヒートマップで表示する
Seabornライブラリを使用して、検索結果をヒートマップで表示することもできます。
以下の例では、age
とcity
の関係をヒートマップで可視化します。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# ageとcityのクロス集計を作成する
heatmap_data = pd.crosstab(df['age'], df['city'])
# ヒートマップを表示する
sns.heatmap(heatmap_data, annot=True, cmap='YlGnBu')
plt.title('年齢と都市のヒートマップ')
plt.xlabel('都市')
plt.ylabel('年齢')
plt.show()
(ヒートマップが表示されます)
これらの可視化手法を活用することで、検索結果をより直感的に理解し、データ分析の結果を効果的に伝えることができます。
まとめ
この記事では、Pandasを使用してCSVファイルから値を検索する方法や、検索結果を操作する技術について詳しく解説しました。
また、複雑な条件での検索や検索結果の可視化に関する応用例も紹介しました。
これらの知識を活用することで、データ分析の効率を高め、より効果的な結果を得ることができるでしょう。
ぜひ、実際のデータを使ってこれらの手法を試し、データ分析のスキルを向上させてみてください。