インデックスとオブジェクトタイプではなく、Pandas DataFrameから値を取得する方法


104

次のDataFrameがあるとしましょう

文字番号
A 1
B 2
C 3
D 4

これは次のコードで取得できます

import pandas as pd

letters=pd.Series(('A', 'B', 'C', 'D'))
numbers=pd.Series((1, 2, 3, 4))
keys=('Letters', 'Numbers')
df=pd.concat((letters, numbers), axis=1, keys=keys)

次に、文字列から値Cを取得します。

コマンドライン

df[df.Letters=='C'].Letters

戻ります

2 C
名前:文字、dtype:オブジェクト

2行全体ではなく、値Cのみを取得するにはどうすればよいですか?


6
無関係了承の上、ごDATAFRAMEをcontructするよりよいの方法があります:pd.DataFrame({'Letters': letters, 'Numbers': numbers})
JoeCondron

回答:


144
df[df.Letters=='C'].Letters.item()

これは、その選択から返されたインデックス/シリーズの最初の要素を返します。この場合、値は常に最初の要素です。

編集:

または、loc()を実行して、最初の要素にその方法でアクセスできます。これは短く、私が過去に実装した方法です。


2
私はこの方法が好きですが、警告が表示されます:FutureWarning: "item" has been deprecated and will be removed in a future version
AlexG

2
@AlexG:代わりにこれを使用できますdf[df.Letters=='C'].Letters.iloc[0]。結果系列の最初の要素(これもユニークです)を生成します。
Anh-Thi DINH

loc [:1]を使用しても、値の横にインデックスが表示されます:(
Sonic Soul

@AlexGおよび@Sonic Soul:df[df.Letters=='C'].Letters.squeeze()代わりに使用してみてください。これは同じように機能します。:)
user78910

52

values属性を使用して値をnp配列として返し、次にを使用[0]して最初の値を取得します。

In [4]:
df.loc[df.Letters=='C','Letters'].values[0]

Out[4]:
'C'

編集する

私は個人的には添え字演算子を使用して列にアクセスすることを好みます:

df.loc[df['Letters'] == 'C', 'Letters'].values[0]

これにより、列名にスペースやダッシュ-を含めることができ、を使用してアクセスするという問題を回避できます.


1
私は個人的に使用していない.列名が数値で始まるか、私はいつも好むので、このような列名にスペースなどの非アルファベット文字がある場合、例えば、この常にではないだろう作品としてアクセス列にdf['col_name']
EdChum

そうですか。そのため、どこにいても、df['col_name']表記ではなく表記を見つけました.。再度、感謝します。
エドゥアルド

1
これは重要ではありませんが、選択範囲ではドット表記を使用して「レター」列にアクセスします。df.loc [df.Letters == 'C']。列名にスペースがある場合は、CSVまたはExcelファイルからインポートする場合と同様に、コンバーターを使用してそれらを取り除く必要があります。
valkn0t 2015年

私は私の答えを更新しますが、それが必要でない限り、私は追加のステップとして、列を改造に反対、この場合には、私はそれは違いはありません同意トーマス-ATO @
EdChum

1
import pandas as pd

dataset = pd.read_csv("data.csv")
values = list(x for x in dataset["column name"])

>>> values[0]
'item_0'

編集:

実際には、古い配列のようにデータセットにインデックスを付けるだけです。

import pandas as pd

dataset = pd.read_csv("data.csv")
first_value = dataset["column name"][0]

>>> print(first_value)
'item_0'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.