PandasのDataFrameは、Pythonにおけるデータ操作に不可欠です。個々のセル値に効率的にアクセスすることはよくあるタスクです。この記事では、これらの値を取得するためのいくつかの方法を検討し、それぞれの長所と短所を明らかにします。
目次
整数ベースのインデックス: iloc
.iloc
は、汎用性の高い整数ベースのインデックスを提供します。行と列の両方に対して0ベースのインデックスを使用します。
import pandas as pd
data = {'col1': [10, 20, 30], 'col2': [40, 50, 60]}
df = pd.DataFrame(data)
# 行1、列0(2行目、1列目)の値にアクセス
value = df.iloc[1, 0]
print(f"Value using iloc: {value}") # 出力: 20
# 行0、列1(1行目、2列目)の値にアクセス
value = df.iloc[0, 1]
print(f"Value using iloc: {value}") # 出力: 40
.iloc
は、特に大規模なDataFrameの場合に効率的で、数値インデックスを使用してセル選択を正確に制御できます。
単一セルアクセスのためのiat
とat
.iat
と.at
は、簡潔な単一セルアクセスを提供します。.iat
は整数ベースのインデックスを使用し、.at
はラベルベースのインデックス(列名)を使用します。
import pandas as pd
data = {'col1': [10, 20, 30], 'col2': [40, 50, 60]}
df = pd.DataFrame(data)
# iatを使用して行1、列0の値を取得
value = df.iat[1, 0]
print(f"Value using iat: {value}") # 出力: 20
# atを使用して行0、列'col2'の値を取得
value = df.at[0, 'col2']
print(f"Value using at: {value}") # 出力: 40
これらのメソッドは、スカラー値を返し、SeriesまたはDataFrameを返さないため、.iloc
よりも単一セルアクセスが高速です。
列とインデックスによるアクセス: df['col_name'].iloc[]
このアプローチは、まず列を選択し、その列の基礎となるNumPy配列内の特定の行にアクセスします。これは、以前の方法よりも柔軟性が低く、効率も低くなります。
import pandas as pd
data = {'col1': [10, 20, 30], 'col2': [40, 50, 60]}
df = pd.DataFrame(data)
# 'col1'の行1の値にアクセス
value = df['col1'].iloc[1] # .values[]よりも効率的
print(f"Value using iloc on column: {value}") # 出力: 20
これは便利に見えるかもしれませんが、効率性と明確性の観点から、選択した列に対して直接.iloc
を使用することをお勧めします。
要約すると、.iloc
、.iat
、.at
は、DataFrameのセルにアクセスするための効率的で読みやすい方法を提供します。列ベースのアプローチで選択した列に.iloc
を使用することは、.values[]
を使用するよりも一般的に推奨されます。ニーズとコーディングスタイルに最適な方法を選択してください。