2017-02-27 6 views
1

작은 하위 목록으로 만들려는 커다란 CSV 파일이 있습니다.이 코드가 작동하지 않는 이유는 무엇입니까? 가치를 분리해야합니까?

유일한 문제는해야하는 일 ... 또는 적어도 일부 물건이 제대로되고

내 문제를 분리하여 데이터를 제대로 분리되지 않는 것입니다 : 나는 데이터가있는 CSV 파일이 그 깊이는 90-3 미터이며, 그 데이터는 그렇게 앞뒤로 갈 것입니다. 나는 최신 파이썬을 사용하고있다.

번호가 다시 증가 할 때마다이를 구분하고 싶습니다.

ex. (깊이) 88, 77, 50, 20, 5, 90, 76, 54, 34, 15,8,4,81,74,62,51,49,30,22,10,8 ... 등 . 90에서 3 사이를 계속 유지합니다.

내가 원하는 것은 90과 3 사이가 될 때마다 데이터를 분리하는 것입니다. 분리되면 해당 목록의 마지막 값과 첫 번째 값을 가져 가고 싶습니다. 전처럼. 90, 76, 54, 34, 15, 8, 4 (여기에서 분리) 81, 74, 62,51, 49, 30, 22, 10, 8)... 등등. ','[ '8.18142', '8.11846', '8.05988', '59 0.4627 :

{ '1': 여기

#two sets of data that you test with. 
m = ['9.90203', '9.79947', '9.66876', '9.54503', '9.42167', '9.2977', '9.17321', '9.05162', '8.11487', '8.038', '7.96111', '7.85746', '7.72701', '7.59709', '7.46781', '7.34127', '7.21842', '7.09548', '6.96798', '6.57355', '6.444', '6.32245', '6.23818', '6.15369', '6.04973', '4.63443', '4.49823', '4.36232', '4.21442', '4.0642', '26.5645', '26.4945', '26.4232', '26.3592', '26.2948', '23.418', '23.3667', '23.2756', '23.1856', '22.1849', '22.0822', '22.0191', '21.9671', '21.9154', '21.8641', '20.436', '20.3865', '20.3364', '20.2083', '20.0915', '19.9758', '19.8601', '19.7446', '19.6317', '18.1383', '17.9834', '17.8271', '17.7529', '17.6949', '17.6317', '17.5675', '17.4362', '16.581', '16.4745', '16.378', '16.2562', '16.1471', '16.0222', '15.89', '14.9752', '14.8725', '14.7666', '14.6234', '14.469', '14.3148', '13.7696', '13.6465', '13.5363', '13.4712', '13.4069', '13.3421', '13.2732', '13.1375', '13.0014', '12.4809', '12.3585', '12.2339', '12.121', '12.0116', '11.901', '11.7906', '11.6645', '11.5278', '11.3931', '11.2551', '11.1211', '10.993', '10.8501', '10.7205', '10.6026', '10.4992', '10.3952'] 
l = ['8.18142', '8.11846', '8.05988', '59.4627', '59.3455', '59.2296', '58.4541', '58.3302', '58.2265', '58.1239', '58.0314', '57.9405', '57.8496', '57.7514', '57.6746', '57.6098', '57.5414', '57.4722', '57.3517', '57.2151', '57.0934', '56.9704', '56.8361', '56.6993', '56.564', '56.4287', '56.3106', '56.2', '56.0877', '55.9782', '55.8869', '55.8223', '55.7578', '55.6933', '55.605', '55.4949', '55.3858', '55.2761', '55.1612', '55.0097', '54.8786', '54.7385', '54.6315', '54.5282', '54.4292', '54.327', '54.2217', '54.1127', '54.0037', '53.8938', '53.7695', '53.6271', '53.4857', '53.3437', '53.2254', '53.1712', '53.12', '53.0679', '53.0102', '52.9126', '52.8148', '52.7182', '52.6207', '52.491', '52.3561', '52.2267', '52.0908', '51.9405', '51.7786', '51.6421', '51.5043', '51.4063', '51.3087', '51.2117', '51.1141', '51.0304', '50.9446', '50.8577', '50.7744', '50.6716', '50.5655', '50.4625', '50.3598', '50.2569', '50.153', '50.0494', '49.9461', '49.8308', '49.7058', '49.582', '49.4583', '49.3473', '49.251', '49.1533', '49.0561', '48.953', '48.83', '48.7064', '48.5812', '48.4635', '48.3852', '48.2998', '48.2219', '48.1428', '48.0327', '47.9221', '47.8114', '47.7007', '47.5964', '47.4905', '47.3875', '47.2847', '47.1595', '47.0424', '46.9264'] 

group =0 
temp = [] 
splited_list = {} 
lengh = len(l) 

for i in range(lengh): 
    if not i == lengh-1: 
     if l[i] > l[i+1]: 
      temp.append(l[i]) 
     else: 
      temp.append(l[i]) 
      group +=1 
      splited_list.update({str(group):temp}) 
      temp = [] 
    else: 
     if l[i] < l[-2]: 
      temp.append(l[i]) 
      group +=1 
      splited_list.update({str(group):temp}) 
      break 
     else: 
      group +=1 
      splited_list.update({str(group):[l[i]]}) 
      break 

print (splited_list) 

내 출력된다 : 여기

내 코드 59.4514 ', '57 .6746', '57 .6098 ', '57 .5414', '95 .2296 ', '58 .4541', '58 .3302 ', '58 .2265', '58 .1239 ', '58 .0314', '57 .9405 ', '57 .8496' , '57 .3517 ', '57 .2157', '57 .0934 ', '56 .936', '56 .6363 ', '56 .564', '56 .4287 ', '56 .3106', '56 .2 ', '56 .0877' 55.7858 ', '55 .7612', '55 .0097 ', '54 .87', '55 .8869 ', '55 .8869', '55 .8223 ', '55 .7578', '55 .6933 ', '55 .605', '55 .4949 ', '55 .3858' 86 ', '54 .7385', '54 .6315 ', '54 .5282', '54 .4292 ', '54 .2217', '54 .1127 ', '54 .0037', '53 .8938 ', '53 .7695', '53 .6271 ', '53 .4857' '53 .3437 ', '53 .2254', '53 .1712 ', '53 .12', '53 .0102 ', '52 .9126', '52 .8148 ', '52 .7182', '52 .6207 ', '52 .491', '52 .3561 ',' 52.2277 ', '51 .1141', '51 .0304 ', '50 .9446', '50 .8577 ', '05 .0908', '95 .0908 ',' , '50 .7744 ', '50 .6716', '50 .5655 ', '50 .4625', '50 .3598 ', '50 .2569', '50 .153 ', '50 .0494', '49 .9461 ', '49 .8308', '49 .7058 ', '49 .582' 49.451 ', '49 .3473', '49 .251 ', '49 .1533', '49 .0561 ', '48 .953', '48 .83 ', '48 .7064', '48 .5812 ', '48 .4635', '48 .3852 ', '48 .2998', '48 .2219 ' , '48 .0327 ', '48 .0327', '47 .9221 ', '47 .8114', '47 .7007 ', '47 .5964', '47 .4905 ', '47 .3875', '47 .2895 ', '47 .0424', '46 .9264 ']}

다음과 같습니다. 내 원하는 출력 :

{ '1': '8.18142', '8.11846', '8.05988', '2': 59 0.4627 ', '59 0.3455', '59 0.2296 '1958 0.4541' '58 .3302 ', '58 .2265', '58 .1239 ', '58 .0314', '57 .9405 ', '57 .8496', '57 .7546 ', '57 .6746', '57 .5414 ', '57 .4722', '57 .3517 ', '57 .2151 ', '57 .0934', '56 .9704 ', '56 .8361', '56 .6993 ', '56 .548', '56 .4287 ', '56 .3106', '56 .2 ', '56 .0877', '55 .9782 ', '55 .8869', '55 .8223 ' '55 .7578 ', '55 .6933', '55 .605 ', '55.4949', '55 .3858 ', '55 .2716', '55 .1612 ', '55 .0097', '54 .8786 ', '54 .7385', '54 .6315 ', '54 .5282', '54 .4292 ', '54 .327', '54 .2217 ', '54 .1127', '54 .0037 ', '53 .8995', '53 .6271 ', '53 .4857', '53 .3437 ', '53 .2254', '53 .1712 ', '53 .12' '53 .0679 ', '53 .0102', '52 .9126 ', '52 .8148', '52 .7182 ', '52 .6207', '52 .491 ', '52 .3561', '52 .2267 ', '52 .0908', '51 .9405 ', '51 .7786', '51 .6421 ', '51 .5043', '51 .4063 ', '51 .3 '05 ', '50', '', '', '', '', '', '', '', '', '', '', '' '' '' '' , '0494 ', '49 .9461', '49 .8308 ', '49 .7058', '49 .4583 ', '49 .3473', '49 .3473 ', '49 .251', '49 .1533 ', '49 .0561', '48 .953 ', '48 .83' 48.7024 ', '48 .5812', '48 .4635 ', '48 .3852', '48 .2998 ', '48 .2219', '48 .1428 ', '48.0327 ', '47 0.9221', '47 0.8114 ', '47 0.7007', '47 0.5964 ', '47 0.4905', '47 0.3875 ', '47 0.2847', '47 0.1595 ', '47 0.0424'1946 0.9264 ']}

+0

1. 'm'으로 무엇을하고 있습니까? 2. '8.05988'은 문자열을 비교할 때 '5'뒤에 '8'이 오기 때문에 '59 .4627 '보다 큽니다. 3. 각 행은 별도의 사전으로되어 있습니까? 4. 키가 단순한 정수 범위 일 경우 사전을 사용해야하는 이유는 무엇입니까? – TigerhawkT3

+0

1. m은 또 다른 테스트 값 집합입니다. – Adam

+0

2. float을 비교해야합니까? 3. 사전을 만들고, 나중에 각 키의 값으로 목록을 만듭니다 (여기에 표시되지 않음). 4. 확실하지 않습니다 ... 코딩에 익숙하지 않습니다. – Adam

답변

0

나는 너를 너무 복잡하게 생각한다. 비교를하기 위해 먼저 문자열을 실수로 변환하고 싶다는 것을 기억하십시오. 또한 색인을 기준으로 각 지점을 참조 할 필요가 없습니다. list 개체를 반복 할 수 있습니다. 또한 위에서 지적했듯이 정수로 키를 사용하는 사전은 약간 특이합니다. 목록 대신 목록을 사용하는 것이 좋습니다.

points = ['9.90203', '9.79947', '9.66876', '9.54503', '9.42167', '9.2977', '9.17321', '9.05162', '8.11487', '8.038', 
      '7.96111', '7.85746', '7.72701', '7.59709', '7.46781', '7.34127', '7.21842', '7.09548', '6.96798', '6.57355', 
      '6.444', '6.32245', '6.23818', '6.15369', '6.04973', '4.63443', '4.49823', '4.36232', '4.21442', '4.0642', 
      '26.5645', '26.4945', '26.4232', '26.3592', '26.2948', '23.418', '23.3667', '23.2756', '23.1856', '22.1849', 
      '22.0822', '22.0191', '21.9671', '21.9154', '21.8641', '20.436', '20.3865', '20.3364', '20.2083', '20.0915', 
      '19.9758', '19.8601', '19.7446', '19.6317', '18.1383', '17.9834', '17.8271', '17.7529', '17.6949', '17.6317', 
      '17.5675', '17.4362', '16.581', '16.4745', '16.378', '16.2562', '16.1471', '16.0222', '15.89', '14.9752', 
      '14.8725', '14.7666', '14.6234', '14.469', '14.3148', '13.7696', '13.6465', '13.5363', '13.4712', '13.4069', 
      '13.3421', '13.2732', '13.1375', '13.0014', '12.4809', '12.3585', '12.2339', '12.121', '12.0116', '11.901', 
      '11.7906', '11.6645', '11.5278', '11.3931', '11.2551', '11.1211', '10.993', '10.8501', '10.7205', '10.6026', 
      '10.4992', '10.3952'] 

data = dict() 
idx = 1 
last_point = float(points[0]) 
subset = [points[0]] 
for point in points[1:]: 
    num_point = float(point) 
    if num_point > last_point: 
     data[idx] = subset 
     subset = [point] 
     idx += 1 
    else: 
     subset.append(point) 
    last_point = num_point 

data[idx] = subset 
+0

어떻게 내 대답과 같은 사전으로 만들겠습니까? 그것은 내가 그것을 나중에 사용할 수 있도록 그대로 유지해야하는 것입니다. – Adam

+0

이것은 사전입니다. 나는 그것을 바꾸지 않았다. 방금 당신이 그것에 대해 생각할 것을 제안했습니다. – Batman

0

는 다음을 시도 할 수 있습니다 : 이것은 당신이 목록의 목록을 제공하는 것입니다

l = map(float, l) 
results = [[ l[0] ]] 

for i in l[1:]: 
    if i>results[-1][-1]: 
     results.append([i]) 
    else: 
     results[-1].append(i) 

. 당신이 정말로 사전을 원하는 경우에, 당신은 시도 할 수 있습니다 : 그것은 조금 더 읽을 수 있기 때문에

resultsDict = dict(enumerate(results)) 

내가 ...

을 이전보다 좋아 :

resultsDict = {i:m for i, m in enumerate(results)} 

또는 그것을 조금 단축

문자열을 유지해야하는 경우 비교 i>results[-1][-1]float(i)>float(results[-1][-1])으로 변경하고 처음 map을 제거 할 수 있습니다.