ith
행 을 선택하려면 다음을 사용하십시오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
Btime
열 에서 i 번째 값을 선택하려면 다음을 사용할 수 있습니다.
In [30]: df_test['Btime'].iloc[0]
Out[30]: 1.2
df_test['Btime'].iloc[0]
(권장)과 df_test.iloc[0]['Btime']
다음 의 차이점이 있습니다 .
DataFrames는 데이터를 열 기반 블록에 저장합니다 (각 블록에는 단일 dtype이 있음). 열별로 먼저 선택하면 뷰 를 반환 할 수 있으며 (복사본을 반환하는 것보다 빠름) 원본 dtype이 유지됩니다. 반면에, 당신은 첫 번째 행으로 선택한 경우 DataFrame 다른 dtypes의 열이있는 경우, 다음 팬더의 사본 오브젝트 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가 현재 구현 되는 방식을 활용 하고 있습니다. Pandas가 앞으로 이런 식으로 작동해야한다는 보장은 없습니다. 특히 (현재) df['Btime']
항상 (사본이 아닌)보기를 반환하므로 의 열의 n 번째 위치에 새 값 df['Btime'].iloc[n] = x
을 할당 하는 데 사용할 수 있다는 사실을 이용합니다 .Btime
df
Pandas는 인덱서가 뷰와 복사본을 반환하는 시점에 대해 명시 적으로 보장하지 않기 때문에 체인 인덱싱을 사용하는 할당은 일반적으로 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
값 을 제공 할 수 없습니다 . 따라서 DataFrame에 0부터 시작하여 정렬 된 순서가 아닌 정수 인덱스가 있으면를 사용 하면 행 이 아닌 레이블 이 지정된 행이 반환됩니다 . 예를 들어ix
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'
df_test.head(1)
있을 것입니다.보다 일반적인 형태는iloc
unutbu의 답변에 따라 사용 하는 것입니다.