2017-11-17 14 views
1

空白以外の値をコピーするのではなく、空白セルにカウンタを埋め込むことは可能ですか?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使用するため、このJythonスクリプトを一意のレコードを作成します。

4空白を使用して複製をクリアします

5最初の複数値セルを分割します。

ここでは、上記の操作のスクリーンキャストです。

enter image description here

あなたは少しのPythonを知っていれば、あなたも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で塗りつぶします。私はちょうどあなたが提案するようにPythonまたはRでそれを行うかもしれません。ありがとう。 –

+0

@EduardGeistこれはまさにそれです:最初のセルxは2で置き換えられ、2番目のセルは3で置き換えられます。そして、あなたの例とまったく同じように、1が現れるたびにカウンタが2にリセットされます。 –

+0

申し訳ありません、はい!これを理解してくれてありがとう。 –

関連する問題