2017-11-17 21 views
1

공백이 아닌 값을 복사하는 대신 빈 셀을 카운터로 채우는 것이 OpenRefine에서 가능합니까?OpenRefine : 증가 카운터로 채우기

example open refine column with some cells filled with 1 and the other with blanks

또는 여기에 입력 한 텍스트와 같은 예 - 영상이 위에서 아래로 열로 :이 예제 이미지에서

1 
1 
blank 
1 
blank 
blank 
blank 
blank 
blank 
1 

내가보고 싶습니다 다음과 같이 채워진 열 (다시 상상을 가다.) :

1 
1 
2 
1 
2 
3 
4 
5 
6 
1 

고마워, 도움이 대단히 감사합니다.

답변

0

정말 간단하지 않습니다. 당신은에 있습니다

import itertools 
data = row['record']['cells']['YOUR COLUMN NAME']['value'] 
x = itertools.count(2) 

liste = [] 
for i, el in enumerate(data): 
    if data[i] == "x": 
     liste.append(x.next()) 
    else: 
     x = itertools.count(2) 
     liste.append(el) 

return ",".join([str(x) for x in liste]) 
:

1은 이러한 "X"

2로 뭔가 다른, 빈 칸을 교체 전체 데이터 세트

3 사용이 자이 썬 스크립트를 고유 레코드를 만듭니다

4 블랭크를 사용하여 중복을 지우십시오.

5 첫 번째 다중 값 셀을 분할하십시오.

다음은 위에서 설명한 작업의 스크린 캐스트입니다. 조금 파이썬을 알고있는 경우

enter image description here

은 또한 pandas을 사용하여 파일을 변환 할 수 있습니다. 가장 우아한 방법은 무엇인지 모르겠지만이 스크립트는 효과가 있습니다.

import itertools 
import pandas as pd 

x = itertools.count(2) 

def set_x(): 
    global x 
    x = itertools.count(2) 

set_x() 

def increase(value): 

    if not value: 
     return next(x) 
    else: 
     set_x() 
     return value 

data = pd.read_csv("your_file.csv", na_values=['nan'], keep_default_na=False) 


data['column 1'] = data['column 1'].apply(lambda row: increase(row)) 

print(data) 

data.to_csv("final_file.csv") 
+0

감사합니다. 위의 OpenRefine 옵션은 내가 원하는 것을 전적으로하지 않는 것 같습니다. 늘어나는 카운터가 아닌 값을 채우고 있다고 말할 수 있습니다. 예를 들어, 5 개의 빈 셀이있는 경우, 2,3,4,5,6이 아닌 1,2,3,1,2로 채우기를 원합니다. 나는 당신이 제안한대로 파이썬이나 R로 그렇게 할 수있다. 감사. –

+0

@EduardGeist 첫 번째 셀 x가 2로, 두 번째 셀이 3으로, 등등으로 바뀝니다. 그리고 카운터는 귀하의 예와 마찬가지로 1이 나타날 때마다 2로 재설정됩니다. –

+0

죄송합니다, 예! 이걸 알아 내서 고맙습니다. –