지정된 열의 첫 번째 행 값을 가져옵니다.
이건 말도 안 되게 쉬운 질문인 것 같은데...내가 기대했던 쉬운 답이 안 보이네
그러면 판다의 주어진 열의 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]
행 표시를 반환하다. i
ith
행.
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)
df.iloc[0].head(1)
첫 번째 은 첫 행 할 수 있습니다. - 첫 번째 행 전체에서만 사용할 수 있습니다.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
그 시리즈에 인덱스를 붙이는 데 사용되었습니다.
다음 두 가지 옵션이 가장 좋습니다.
제로 인덱스 위치 사용:
df.iat[0, 4] # 0번째 행과 4번째 열의 값을 가져옵니다.
라벨 사용:
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
'source' 카테고리의 다른 글
PHP의 키에 값 복사 (0) | 2022.09.28 |
---|---|
easy_install/pip과 함께 설치된 모든 패키지를 찾으시겠습니까? (0) | 2022.09.28 |
문자열에서 인쇄할 수 없는 문자를 모두 제거하려면 어떻게 해야 합니까? (0) | 2022.09.28 |
SQL Chemy 식에서 원시 컴파일 SQL 쿼리를 가져오려면 어떻게 해야 합니까? (0) | 2022.09.28 |
.NET Core 2.1 Identity는 모든 사용자에게 관련된 역할을 가져옵니다. (0) | 2022.09.28 |