Pandas

[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以上の人のnameageを棒グラフで表示します。

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ライブラリを使用して、検索結果をヒートマップで表示することもできます。

以下の例では、agecityの関係をヒートマップで可視化します。

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ファイルから値を検索する方法や、検索結果を操作する技術について詳しく解説しました。

また、複雑な条件での検索や検索結果の可視化に関する応用例も紹介しました。

これらの知識を活用することで、データ分析の効率を高め、より効果的な結果を得ることができるでしょう。

ぜひ、実際のデータを使ってこれらの手法を試し、データ分析のスキルを向上させてみてください。

関連記事

Back to top button