2016-12-31 7 views
2

죄송합니다. 이전에 요청 하셨다면 죄송합니다.이 특정 질문을 찾을 수 없습니다.파이썬은 이전 홀수 열에서 모든 짝수 열을 뺍니다.

파이썬에서, 나는 이전 홀수 열에서 모든에도 열을 빼기 싶습니다 : 알 수없는이 될 것입니다

292.087 190.238 299.837 189.488 255.525 187.012 
300.837 190.887 299.4 188.488 248.637 187.363 
292.212 191.6 299.038 188.988 249.65 187.5 
300.15 192.4 307.812 189.125 247.825 188.113 

101.849 110.349 68.513 
109.95 110.912 61.274 
100.612 110.05 62.15 
107.75 118.687 59.712 

에 :

그렇게에서 이동 열의 수. pandas 또는 numpy에 무엇인가 사용해야합니까?

미리 감사드립니다.

+0

이 데이터는 어떻게 표현됩니까? NumPy를 사용하고 있습니까? 팬더? 목록의 목록? – user2357112

+0

이것은 파이썬 데이터 구조가 아닙니다. CSV입니까? – roganjosh

+0

예,이 파일은 CSV 파일에서 파이썬으로 가져옵니다. – BioProg

답변

2

팬더를 사용하여이를 수행 할 수 있습니다. 짝수 인덱스 열과 홀수 인덱스 열을 따로 선택하여 빼기 수 있습니다.

@hiro 주인공, 나는 당신이 그 StringIO 마법을 할 수 있는지 몰랐습니다. 그것은 매운 것입니다. 파이썬 신호 열이 실제로 짝수 있고 배경 열은 홀수 인덱스 즉, 0 인덱싱하므로, 짝수/홀수 용어 어긋 수 있음은

import pandas as pd 
import io 

data = io.StringIO('''ROI121 ROI122 ROI124 ROI125 ROI126 ROI127 
         292.087 190.238 299.837 189.488 255.525 187.012 
         300.837 190.887 299.4 188.488 248.637 187.363 
         292.212 191.6 299.038 188.988 249.65 187.5 
         300.15 192.4 307.812 189.125 247.825 188.113''') 

df = pd.read_csv(data, sep='\s+') 

참고. 귀하의 질문을 적절하게 이해하면 귀하의 짝수/홀수 용어 사용에 위배됩니다. 단지 혼란을 피하기 위해 차이점을 지적하십시오.

# strip the columns into their appropriate signal or background groups 
bg_df = df.iloc[:, [i for i in range(len(df.columns)) if i%2 == 1]] 
signal_df = df.iloc[:, [i for i in range(len(df.columns)) if i%2 == 0]] 

# subtract the values of the data frames and store the results in a new data frame 
result_df = pd.DataFrame(signal_df.values - bg_df.values) 

에는 신호와 배경 열의 차이가있는 열이 있습니다. 하지만이 열 이름의 이름을 바꿀 수도 있습니다. 출력

>>> result_df 
     0  1  2 
0 101.849 110.349 68.513 
1 109.950 110.912 61.274 
2 100.612 110.050 62.150 
3 107.750 118.687 59.712 
+0

옙, 나는 그처럼 유용한 파일을 위장해서 찾는다. 당신의 팬더 버전처럼! +1 –

2
import io 

# faking the data file 
data = io.StringIO('''ROI121 ROI122 ROI124 ROI125 ROI126 ROI127 
292.087 190.238 299.837 189.488 255.525 187.012 
300.837 190.887 299.4 188.488 248.637 187.363 
292.212 191.6 299.038 188.988 249.65 187.5 
300.15 192.4 307.812 189.125 247.825 188.113''') 

header = next(data) # read the first line from data 
# print(header[:-1]) 
for line in data: 
    # print(line) 
    floats = [float(val) for val in line.split()] # create a list of floats 
    for prev, cur in zip(floats[::2], floats[1::2]): 
     print('{:6.3f}'.format(prev-cur), end=' ') 
    print() 

는 :

101.849 110.349 68.513 
109.950 110.912 61.274 
100.612 110.050 62.150 
107.750 118.687 59.712 

당신은 data[start:stop:step] 수단과 방법 zip이 작품이 쉽게 이해되어야한다 무엇을 알고있는 경우.