팬더 데이터 프레임을 만들었습니다
df = DataFrame(index=['A','B','C'], columns=['x','y'])
그리고 이것을 얻었다
xy NaN NaN B NaN NaN C NaN NaN
그런 다음 행 ‘C’와 열 ‘x’와 같은 특정 셀에 값을 할당하고 싶습니다. 나는 그런 결과를 얻을 것으로 기대했다.
xy NaN NaN B NaN NaN C 10 NaN
이 코드로 :
df.xs('C')['x'] = 10
그러나 내용은 df
바뀌지 않았습니다. 그것은 다시 NaN
DataFrame 에만 있습니다.
어떤 제안?
답변
RukTech의 대답은 , df.set_value('C', 'x', 10)
멀리 멀리 더 빨리 내가 아래에 제시 한 옵션보다. 그러나 더 이상 사용되지 않을 예정입니다 .
앞으로 권장되는 방법은.iat/.at
입니다.
왜 df.xs('C')['x']=10
작동하지 않습니까?
df.xs('C')
기본적으로 데이터 사본 이 포함 된 새 데이터 프레임 을 반환 하므로
df.xs('C')['x']=10
이 새 데이터 프레임 만 수정합니다.
df['x']
df
데이터 프레임 의 뷰를 반환 하므로
df['x']['C'] = 10
df
자신을 수정 합니다.
경고 : 작업이 복사본 또는 뷰를 반환하는지 예측하기 어려운 경우가 있습니다. 이러한 이유로 문서는 “chained indexing”으로 할당을 피하는 것이 좋습니다 .
따라서 권장되는 대안은
df.at['C', 'x'] = 10
이는 않습니다 수정 df
.
In [18]: %timeit df.set_value('C', 'x', 10)
100000 loops, best of 3: 2.9 µs per loop
In [20]: %timeit df['x']['C'] = 10
100000 loops, best of 3: 6.31 µs per loop
In [81]: %timeit df.at['C', 'x'] = 10
100000 loops, best of 3: 9.2 µs per loop
답변
업데이트 : .set_value
메소드가 더 이상 사용되지 않습니다 . .iat/.at
안타깝게도 팬더는 문서를 거의 제공하지 않습니다.
가장 빠른 방법은 set_value를 사용하는 것 입니다. 이 방법은 방법보다 ~ 100 배 빠릅니다 .ix
. 예를 들면 다음과 같습니다.
df.set_value('C', 'x', 10)
답변
다음 .loc
과 같이 조건부 조회를 사용할 수도 있습니다 .
df.loc[df[<some_column_name>] == <condition>, [<another_column_name>]] = <value_to_add>
여기서 변수 <some_column_name
를 확인하려는 열이 있고 추가하려는 열이 있습니다 (새 열 또는 이미 존재하는 열일 수 있음). 해당 열 / 행에 추가하려는 값입니다.<condition>
<another_column_name>
<value_to_add>
이 예제는 당면한 질문에 정확하게 작동하지 않지만 조건에 따라 특정 값을 추가하려는 경우 유용 할 수 있습니다.
답변
값을 설정하는 권장되는 방법은 (관리자에 따라) 다음과 같습니다.
df.ix['x','C']=10
‘체인 인덱싱'( df['x']['C']
)을 사용하면 문제가 발생할 수 있습니다.
보다:
답변
사용해보십시오 df.loc[row_index,col_indexer] = value
답변
답변
.iat/.at
좋은 해결책입니다. 이 간단한 data_frame이 있다고 가정합니다.
A B C
0 1 8 4
1 3 9 6
2 22 33 52
우리가 셀의 값을 수정하려면 [0,"A"]
u는 그 해결책 중 하나를 사용할 수 있습니다 :
df.iat[0,0] = 2
df.at[0,'A'] = 2
다음은 iat
셀 값을 가져오고 설정 하는 데 사용하는 전체 예제 입니다.
def prepossessing(df):
for index in range(0,len(df)):
df.iat[index,0] = df.iat[index,0] * 2
return df
y_train 전 :
0
0 54
1 15
2 15
3 8
4 31
5 63
6 11
iat
각 셀의 값에 2를 곱하도록 변경 하는 사전 추정 기능을 호출 한 후 y_train :
0
0 108
1 30
2 30
3 16
4 62
5 126
6 22