Pandas-récupère la première valeur de ligne d'une colonne donnée

Cela semble être une question ridiculement facile... mais je ne vois pas la réponse que j'attendais.

Alors, comment puis-je obtenir la valeur à une nième ligne d'une colonne donnée dans les Pandas? (Je suis particulièrement intéressé par la première ligne, mais je serais également intéressé par une pratique plus générale).

Par exemple, disons que je veux extraire la valeur 1.2 dans Btime en tant que variable.

Quelle est la bonne façon de le faire?

Df_test =

  ATime   X   Y   Z   Btime  C   D   E
0    1.2  2  15   2    1.2  12  25  12
1    1.4  3  12   1    1.3  13  22  11
2    1.5  1  10   6    1.4  11  20  16
3    1.6  2   9  10    1.7  12  29  12
4    1.9  1   1   9    1.9  11  21  19
5    2.0  0   0   0    2.0   8  10  11
6    2.4  0   0   0    2.4  10  12  15
123
demandé sur smci 2014-08-12 03:30:16

5 réponses

Pour sélectionner le ith ligne, utiliser iloc:

In [31]: df_test.iloc[0]
Out[31]: 
ATime     1.2
X         2.0
Y        15.0
Z         2.0
Btime     1.2
C        12.0
D        25.0
E        12.0
Name: 0, dtype: float64

Pour sélectionner la ième valeur dans la colonne Btime, vous pouvez utiliser:

In [30]: df_test['Btime'].iloc[0]
Out[30]: 1.2

Avertissement: j'avais déjà suggéré df_test.ix[i, 'Btime']. Mais ce n'est pas garanti pour vous donner la ith depuis ix essaie à l'index par label avant d'essayer de l'indice par position. Donc, si le DataFrame a un index entier qui n'est pas dans l'ordre trié à partir de 0, alors l'utilisation de ix[i] renverra la ligne marqué i plutôt que de la ith ligne. Par exemple,

In [1]: df = pd.DataFrame({'foo':list('ABC')}, index=[0,2,1])

In [2]: df
Out[2]: 
  foo
0   A
2   B
1   C

In [4]: df.ix[1, 'foo']
Out[4]: 'C'
211
répondu unutbu 2014-08-12 08:46:33

Notez que la réponse de @unutbu sera correcte jusqu'à ce que vous souhaitiez définir la valeur à quelque chose de nouveau, alors cela ne fonctionnera pas si votre dataframe est une vue.

In [4]: df = pd.DataFrame({'foo':list('ABC')}, index=[0,2,1])
In [5]: df['bar'] = 100
In [6]: df['bar'].iloc[0] = 99
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas-0.16.0_19_g8d2818e-py2.7-macosx-10.9-x86_64.egg/pandas/core/indexing.py:118: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self._setitem_with_indexer(indexer, value)

Une autre approche qui fonctionnera systématiquement avec le réglage et l'obtention est:

In [7]: df.loc[df.index[0], 'foo']
Out[7]: 'A'
In [8]: df.loc[df.index[0], 'bar'] = 99
In [9]: df
Out[9]:
  foo  bar
0   A   99
2   B  100
1   C  100
16
répondu andrew 2015-08-19 18:42:35
  1. df.iloc[0].head(1) - premier jeu de données uniquement à partir de la première ligne entière.
  2. df.iloc[0] - Toute la première ligne de la colonne.
6
répondu nikhil 2017-03-25 13:17:35

Une autre façon de le faire:

first_value = df['Btime'].values[0]

Cette façon semble être plus rapide que d'utiliser .iloc:

In [1]: %timeit -n 1000 df['title'].values[20]
5.82 µs ± 142 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [2]: %timeit -n 1000 df['title'].iloc[20]
29.2 µs ± 1.28 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
4
répondu Abdo 2018-02-28 17:23:21

' une manière générale, si vous souhaitez récupérer les N premières lignes de la colonne J de pandas dataframe la meilleure façon de le faire est:

Data = dataframe[0: N] [:, J]

1
répondu anis 2017-09-01 17:47:45