データフレームの最後の要素のアクセスインデックス


83

私はこれを探し回っていますが、見つけることができないようです(非常に些細なことですが)。

私が抱えている問題は、データフレームの最初と最後のエントリの列の値を取得したいということです。しかし、私がそうするなら:

df.ix[0]['date']

私は得る:

datetime.datetime(2011, 1, 10, 16, 0)

しかし、私がそうする場合:

df[-1:]['date']

私は得る:

myIndex
13         2011-12-20 16:00:00
Name: mydate

別の形式で。理想的には、データフレームの最後のインデックスの値にアクセスできるようにしたいのですが、その方法がわかりません。

インデックスの値を使用して列(IndexCopy)を作成し、次のことを試してみました。

df.ix[df.tail(1)['IndexCopy']]['mydate']

ただし、これによって異なる形式も生成されます(df.tail(1)['IndexCopy']は単純な整数を出力しないため)。

何か案は?

回答:


129

以前の回答は現在、.iloc次のように置き換えられています。

>>> df = pd.DataFrame({"date": range(10, 64, 8)})
>>> df.index += 17
>>> df
    date
17    10
18    18
19    26
20    34
21    42
22    50
23    58
>>> df["date"].iloc[0]
10
>>> df["date"].iloc[-1]
58

私が使用を考えることができる最短の方法.iget()

>>> df = pd.DataFrame({"date": range(10, 64, 8)})
>>> df.index += 17
>>> df
    date
17    10
18    18
19    26
20    34
21    42
22    50
23    58
>>> df['date'].iget(0)
10
>>> df['date'].iget(-1)
58

または:

>>> df['date'][df.index[0]]
10
>>> df['date'][df.index[-1]]
58

.first_valid_index()ともあり.last_valid_index()ますが、除外するかどうかによっては、希望NaNどおりにならない場合があります。

それは覚えておいてくださいdf.ix[0]あなたの最初を与えるものではありませんが、例えば0でインデックスさ1は、上記の場合には、df.ix[0]生成します

>>> df.ix[0]
Traceback (most recent call last):
  File "<ipython-input-489-494245247e87>", line 1, in <module>
    df.ix[0]
[...]
KeyError: 0

ご回答有難うございます。ただし、最初のインデックスが0でなくても、df.ix [0]がデータフレームの最初の行を提供しているように見える別のデータフレームがあります。特に、df.index [0]の結果は0ではありません。 、それでもdf.ix [df.index [0]]とdf.ix [0]は同じ結果をもたらします。何故ですか?
elelias 2013

インデックスを確認する必要がありますが、インデックスが数値ではないためだと思います。その場合、整数によるアクセスは、キーではなくインデックスのように動作する可能性があります。これは、求めているものに曖昧さがないためSomething(["A", "B", "C"])[1]ですが、持っている場合は何が欲しいSomething([1,2,3,4])[1]ですか?関係する頭痛の種については、ドキュメントのさまざまなセクションをお読みください。
DSM

フロートにdf ['xxx'] [df.index [0]]を使用するにはどうすればよいですか?私はフロート56.7888を持っていて、57ではなく56に変換されています
lvthillo 2018

1
呼び出しiget()できます'Series' object has no attribute 'iget'
スザナ

15

パンダのデータフレームの行のインデックスを整数として取得するで、 @ comteの回答とdmdipの回答を組み合わせる

df.tail(1).index.item()

インデックスの値を示します。


インデックスがされていることに注意してくださいではない、常に明確に定義された彼らは、マルチインデックス付きまたはインデックス付きシングルある問題ではありませ。インデックスを使用してデータフレームを変更すると、予期しない動作が発生する可能性があります。マルチインデックスの場合の例を示しますが、これはシングルインデックスの場合にも当てはまることに注意してください

私たちが持っていると言う

df = pd.DataFrame({'x':[1,1,3,3], 'y':[3,3,5,5]}, index=[11,11,12,12]).stack()

11  x    1
    y    3
    x    1
    y    3
12  x    3
    y    5              # the index is (12, 'y')
    x    3
    y    5              # the index is also (12, 'y')

df.tail(1).index.item() # gives (12, 'y')

インデックスと最後の要素にアクセスしようとしたdf[12, "y"]利回り

(12, y)    5
(12, y)    5
dtype: int64

インデックス(12, y)に基づいてデータフレームを変更しようとすると、1行ではなく2行が変更されます。したがって、最後の行のインデックスの値にアクセスすることを学習したとしても、同じインデックスを共有するものが多数ある可能性があるため、インデックスに基づいて最後の行の値を変更することはお勧めできません。df.iloc[-1]ただし、この場合は、を使用して最後の行にアクセスする必要があります。

参照

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.item.html


7
df.tail(1).index 

最も読みやすいようです


これは数値を返しませんが、RangeIndex(start = 6、stop = 7、step = 1)
alexandergs

5
アレックス:返されたからindexstart=6最後の要素のオフセットを示します。したがって、df.tail(1)最後の要素を取得し、などの最後の要素にdf["your_column"][6]なりますyour_column(ただしdf.last_valid_index()、数値のみを示します)
michael 2017年

2

今では遅すぎるかもしれません。indexメソッドを使用[-1]してDataFrameの最後のインデックスを取得してから、を使用して最後の値を取得します。

例えば、

df = pd.DataFrame(np.zeros((4, 1)), columns=['A'])
print(f'df:\n{df}\n')

print(f'Index = {df.index}\n')
print(f'Last index = {df.index[-1]}')

出力は

df:
     A
0  0.0
1  0.0
2  0.0
3  0.0

Index = RangeIndex(start=0, stop=4, step=1)

Last index = 3

2

二重角かっこ付きの.ilocが必要です。

import pandas as pd
df = pd.DataFrame({"date": range(10, 64, 8), "not_date": "fools"})
df.index += 17
df.iloc[[0,-1]][['date']]

.ilocにインデックスのリスト、具体的には最初と最後の[0、-1]を指定します。これにより、「日付」列を要求するデータフレームが返されます。['date']はシリーズ(yuck)を提供し、[['date']]はデータフレームを提供します。


0

Pandasは、次のことを可能にするNumPy構文をサポートしています。

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