2015-12-08 7 views
5

Предположим, что у меня есть DataFrame, такие как:получения последнего значения столбца dataframe без индекса

df = pd.DataFrame(np.random.randn(10,5), columns = ['a','b','c','d','e']) 

и хотел бы получить последнее значение в столбце е. Я могу сделать:

df['e'].tail(1) 

но это вернет серию, в которой есть индекс 9. В идеале я просто хочу получить значение как число, с которым я могу работать напрямую. я мог бы также сделать:

np.array(df['e'].tail(1)) 

, но это потребовало бы мне доступ/вызовите 0'th его элемент, прежде чем я действительно могу работать с ним. есть ли более прямой/простой способ сделать это?

ответ

14

Вы можете попробовать iloc метод dataframe:

In [26]: df 
Out[26]: 
      a   b   c   d   e 
0 -1.079547 -0.722903 0.457495 -0.687271 -0.787058 
1 1.326133 1.359255 -0.964076 -1.280502 1.460792 
2 0.479599 -1.465210 -0.058247 -0.984733 -0.348068 
3 -0.608238 -1.238068 -0.126889 0.572662 -1.489641 
4 -1.533707 -0.218298 -0.877619 0.679370 0.485987 
5 -0.864651 -0.180165 -0.528939 0.270885 1.313946 
6 0.747612 -1.206509 0.616815 -1.758354 -0.158203 
7 -2.309582 -0.739730 -0.004303 0.125640 -0.973230 
8 1.735822 -0.750698 1.225104 0.431583 -1.483274 
9 -0.374557 -1.132354 0.875028 0.032615 -1.131971 

In [27]: df['e'].iloc[-1] 
Out[27]: -1.1319705662711321 

Или, если вы хотите просто скалярным вы могли бы использовать iat который быстрее. Из docs:

Если вы хотите получить доступ к скаляру, самый быстрый способ заключается в использовании at и iat методы, которые реализуются на все структуры данных

In [28]: df.e.iat[-1] 
Out[28]: -1.1319705662711321 

Бенчмаркинг :

In [31]: %timeit df.e.iat[-1] 
100000 loops, best of 3: 18 µs per loop 

In [32]: %timeit df.e.iloc[-1] 
10000 loops, best of 3: 24 µs per loop 
Смежные вопросы