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을 할당 하는 데 사용할 수 있다는 사실을 이용합니다 .Btimedf
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부터 시작하여 정렬 된 순서가 아닌 정수 인덱스가 있으면를 사용 하면 행 이 아닌 레이블 이 지정된 행이 반환됩니다 . 예를 들어ixix[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'
df_test.head(1)있을 것입니다.보다 일반적인 형태는ilocunutbu의 답변에 따라 사용 하는 것입니다.