2016-12-30 3 views
-1

배경 숫자 열을 인쇄하는 csv 데이터 시트를 처리합니다. 첫 번째 열을 가져다가 float (즉, 45 시간 반 = 45.5) 시간을 물어보고 첫 번째 열에서 그 수를 뺍니다 프로그램에서 작업하고 있습니다. 나는 그 점에서 성공적이었다. 이제 "0"시점의 행 인덱스를 찾아야합니다. min을 사용하여 해당 색인을 찾은 다음 다음 열 A1에서 색인을 호출합니다. 나는 시간 0에서 그때 그래프를 볼 수 있도록 A1을 정상화하기 위해 칼럼 A1에서 (그리고 결국 모든 후속 컬럼 그러나 아기 단계들)데이터 프레임 열을 부동 소수점으로 나누려고합니다. NaN

time_zero = float(input("Which time would you like to be set to 0?")) 
df['A1']= df['A1']-time_zero 

이것은 제로 시간을 설정하기 위해 지금까지 문제없이 작동합니다.

zero_location_series = df[df['A1'] == df['A1'].min()] 
r1 = zero_location_series[' A1.1'] 
df[' A1.1'] = df[' A1.1']/r1 

여기 내가 문제가되는 곳입니다. 첫 번째 행은 다른 모든 열에 대해 수행 할 수있는 계열을 올바르게 식별합니다. 다음 r1은 적절한 A1.1 값을 올바르게 식별하며 type(r1)을 사용할 때이 값은 부동입니다. 그러나 df[' A1.1']/r1을 나눌 때 올바른 값은 하나 뿐이며 그 값은 r1/r1 = 1입니다. 다른 모든 값은 NaN입니다.

내 질문 :

  1. 은 어떻게 생각 부동 소수점에 의해 열을 분할하는? NaN을받는 이유는 무엇입니까?
  2. 16 열 (예 : 'A2/r2' 'a3/r3'등)에 대해 이렇게해야하는 더 빠른 방법이 있습니까?
  3. 어디에서든지 inplace = True를 수행해야합니까? 작업은 데이터를 다시 저장하기 전에 스틱을 사용합니까? 또는 행을 추가/삭제하기위한 것입니까? 이 과 같은

Dataframe! http://i.imgur.com/ObUzY7p.png 0시 간이 올바르게 설정 됨 (이미지가 표시되지 않음)

! http://i.imgur.com/TpLUiyE.png

+1

당신은 문제를 보여주는 자체에 포함 된 예제를 게재 할 수 있습니까? – BrenBarn

+0

피연산자 중 하나가'NaN' 일 때 종종'NaN'을 얻습니다. – user86895

답변

0

은 R1에 의해 컬럼의 모든 값을 나눌 경우, 예를 들어, 적용하는 것이 가장 좋습니다 :

df = df["A1.1"].apply(lambda x: x/r1, 0) 

이 :

import pandas as pd 
df = pd.DataFrame([1,2,3,4,5]) 
# apply an anonymous function to the first column ([0]), divide every value 
# in the column by 3 
df = df[0].apply(lambda x: x/3.0, 0) 
print(df) 

그래서 당신은 아마 이런 식으로 뭔가를 원하는 것 정말로 당신의 질문 2 부분 만 대답합니다. 적용은 아마도 여러 행과 열의 함수를 신속하게 실행하기위한 최선의 방법 일 것입니다. 왜 당신이 부동 소수점으로 나눌 때 nans를 얻는가에 관해서는, 여러분의 컬럼에있는 값이 부동 소수점 또는 정수가 아닌 다른 값일 수 있습니까?

+0

이것은 작동합니다! 지금은 새로운 문제가 생겼지 만 아마도 최소 (> 0 분)를 원할 때 min()을 사용하여 문제를 해결할 수 있다고 생각합니다. 죄송합니다. 응답하는 데 너무 오래 걸렸습니다 (휴가를 통해 내 시간을 과대 평가했습니다.). 도움을 주셔서 대단히 감사합니다. –

1

이 작동합니다 :

df['A1.1']=df['A1.1']/df['A1.1'].min() 

나는 이유 df[' A1.1'] = df[' A1.1']/r1r1이 시리즈이기 때문이었다 작동하지 않았다 생각합니다. type(r1) 대신 r1?을 시도하고 팬더는 r1이 개별 플로트 번호가 아니라 시리즈라고 알려줍니다.

한 시도를 수행하려면 다음과 같이 각 열을 반복해야합니다 :

for c in df: 
    df[c] = df[c]/df[c].min()