source

지정된 열의 첫 번째 행 값을 가져옵니다.

factcode 2022. 9. 28. 00:04
반응형

지정된 열의 첫 번째 행 값을 가져옵니다.

이건 말도 안 되게 쉬운 질문인 것 같은데...내가 기대했던 쉬운 답이 안 보이네

그러면 판다의 주어진 열의 n번째 행에서 값을 얻는 방법은 무엇일까요?(특히 첫 번째 줄에 관심이 있지만, 좀 더 일반적인 연습에도 관심이 있습니다.)

예를 들어 1.2의 값을 끌어당겨서Btime변수로써.

어떻게 하면 좋을까요?

>>> 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

를 선택하려면ith행, 사용:

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

에서 ith 값을 선택하려면Btime사용할 수 있는 열:

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

와는 차이가 있다.df_test['Btime'].iloc[0](권장) 및df_test.iloc[0]['Btime']:

데이터 프레임은 데이터를 열 기반 블록(각 블록에 단일 dtype이 있음)에 저장합니다.먼저 열별로 선택하면 보기를 반환할 수 있으며(복사본을 반환하는 것보다 빠름) 원래 dtype이 유지됩니다.반대로 행별로 먼저 선택하고 DataFrame에 서로 다른 dtype 열이 있는 경우 Panda는 데이터를 새 개체 dtype 시리즈로 복사합니다.따라서 열을 선택하는 것이 행을 선택하는 것보다 조금 더 빠릅니다.따라서, 비록df_test.iloc[0]['Btime']작동하다,df_test['Btime'].iloc[0]조금 더 효율적입니다.

과제와 관련해서 둘 사이에는 큰 차이가 있다. df_test['Btime'].iloc[0] = x영향을 주다df_test,그렇지만df_test.iloc[0]['Btime']아닐지도 모른다.그 이유에 대해서는, 이하를 참조해 주세요.인덱싱 순서의 미세한 차이가 동작에 큰 차이가 있으므로 단일 인덱싱 할당을 사용하는 것이 좋습니다.

df.iloc[0, df.columns.get_loc('Btime')] = x

df.iloc[0, df.columns.get_loc('Btime')] = x(권장):

DataFrame에 새로운 값을 할당하는 권장 방법은 연쇄 인덱싱을 피하고 대신 andrew에 표시된 방법을 사용하는 입니다.

df.loc[df.index[n], 'Btime'] = x

또는

df.iloc[n, df.columns.get_loc('Btime')] = x

후자의 방법이 조금 더 빠릅니다.df.loc행 및 열 레이블을 위치 인덱스로 변환해야 하므로 를 사용하는 경우 변환이 약간 줄어듭니다.df.iloc대신.


df['Btime'].iloc[0] = x동작하지만 권장되지 않습니다.

이는 작동하지만 현재 DataFrames가 구현되는 방식을 활용하고 있습니다.판다들이 미래에 이런 식으로 일해야 한다는 보장은 없다.특히 (현재)df['Btime']는 항상 (복사가 아닌) 뷰를 반환합니다.df['Btime'].iloc[n] = x의 n번째 위치에 새 값을 할당하기 위해 사용할 수 있습니다.Btime의 열df.

Panda는 인덱서가 언제 뷰를 반환하는지와 복사본을 반환하는지에 대해 명시적인 보증을 하지 않기 때문에 체인 인덱스를 사용하는 할당은 일반적으로 항상 문제를 제기합니다.SettingWithCopyWarning하더라도 이 경우 수정은 성공합니다.df:

In [22]: df = pd.DataFrame({'foo':list('ABC')}, index=[0,2,1])
In [24]: df['bar'] = 100
In [25]: df['bar'].iloc[0] = 99
/home/unutbu/data/binky/bin/ipython:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

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

In [26]: df
Out[26]: 
  foo  bar
0   A   99  <-- assignment succeeded
2   B  100
1   C  100

df.iloc[0]['Btime'] = x하지않않 않않않다다

'아저씨', '아저씨'와의 df.iloc[0]['bar'] = 123「」가 .df.iloc[0]다음과 같이 합니다.

In [66]: df.iloc[0]['bar'] = 123
/home/unutbu/data/binky/bin/ipython:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

In [67]: df
Out[67]: 
  foo  bar
0   A   99  <-- assignment failed
2   B  100
1   C  100

경고:전에 내가 제안했다df_test.ix[i, 'Btime']. 하지만, 이것은 당신이 주는 것은 아닙니다.ith「」이래의 ix상표에 위치에 의해 분류하려고 하기 전에 분류하려고 하겠죠만약 그 DataFrame는 정렬된 주문에 0에서, 그 다음을 사용하여 시작하지 않은 정수 색인이 있다.ix[i]행 표시를 반환하다. iith 행.

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'

때까지 새로운 것에 다니면 당신의 dataframe 의견 그것은 작동하지는 못할 값을 설정하고 싶어 한다는@ unutbu로부터 답변 정확한 것이다.

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)

는 지속적으로 만들고 설정과 협력할 것이다 또 다른 접근법이죠.

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

또 다른 방법:.

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

것 같습니다..iloc:

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

In [2]: %timeit -n 1000 df['Btime'].iloc[20]
29.2 µs ± 1.28 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
  1. df.iloc[0].head(1)첫 번째 은 첫 행 할 수 있습니다. - 첫 번째 행 전체에서만 사용할 수 있습니다.
  2. df.iloc[0]첫 행 가 열에 . - 첫 번째 행이 열에 있습니다.

일반적으로 J 에서 첫 번째 N 행을 선택하는 경우pandas dataframe이를 위한 최선의 방법은 다음과 같습니다.

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

예를 들어 '테스트' 열과 1행의 값을 얻으려면 다음과 같이 작동합니다.

df[['test']].values[0][0]

df[['test']].values[0]

단일 값에 액세스하려면 다음보다 훨씬 빠른 방법을 사용할 수 있습니다.

df['Btime'].iat[0]

다음 방법도 사용할 수 있습니다.

df['Btime'].take(0)

.iat ★★★★★★★★★★★★★★★★★」.at는 단일 으로, 보다 ..iloc ★★★★★★★★★★★★★★★★★」.loc을 지적했지만, 은 Mykola Zotko를 사용하지 .iat최대한으로.

합니까?.iat ★★★★★★★★★★★★★★★★★」.at데이터 프레임에 한 번만 인덱스하면 됩니다.

이것은 좋지 않다.

df['Btime'].iat[0]

에 'Btime'되었고 그 에 'Btime' 컬럼이 선택되었기 이지 않습니다..iat그 시리즈에 인덱스를 붙이는 데 사용되었습니다.

다음 두 가지 옵션이 가장 좋습니다.

  1. 제로 인덱스 위치 사용:

    df.iat[0, 4] # 0번째 행과 4번째 열의 값을 가져옵니다.

  2. 라벨 사용:

    df.at[0, 'Btime'] # 인덱스 라벨이 0이고 열 이름이 "Btime"인 값을 가져옵니다.

두 메서드 모두 1.2의 값을 반환합니다.

첫 번째 행을 가져와 인덱스를 유지하는 또 다른 방법은 다음과 같습니다.

x = df.first('d') # Returns the first day. '3d' gives first three days.

언급URL : https://stackoverflow.com/questions/25254016/get-first-row-value-of-a-given-column

반응형