2017-04-26 18 views
0

我需要編輯列中的所有3000個電話號碼,以便撥號代碼位於括號內。例如由: 49 089/514 6977 - 18 到: 49(089)514 6977 - 18使用Python處理單元格中的數據(Openrefine)

林與熊貓猜測應該是可能的。我使用開放精煉?

+0

'S [:4] + '(' + S [4:7] + ')' + S [7:]' –

回答

1

嘗試這樣的:

df['Column_Name'] = df['Column_Name'].apply(lambda x: x[:4]+'('+x[4:7]+')'+x[9:]) 

如果你有加後單人和雙人,甚至三位數,去這樣的:

df['Column_Name'] = df['Column_Name'].apply(lambda x: ' '.join([part if i != 1 else '(' + part + ')' for i, part in enumerate(x.split()) if i != 2])) 

如果有的正確寫入,您可以使用:

df['Column_Name'] = df['Column_Name'].apply(lambda x: ' '.join([part if i != 1 else '(' + part + ')' for i, part in enumerate(x.split()) if i != 2]) if '(' not in x else x) 
+1

申請應該工作,但是由於某些國傢俱有非2 (美國+1,捷克共和國+420)x [:4]的方法不起作用。我會建議正則表達式 –

+0

@VictorG。你是絕對正確的,所以我編輯了這些情況:) – zipa

+0

嗨Zipa,謝謝你的迴應。如果其中一些數字已經有括號的話呢?並且我只是將'column_name'更改爲openrefine中的實際列名稱? – Mac

0

如果您正在使用Open Refine,您可以嘗試如下所示:

value.replace(/(\d{3}) \//, "($1)").replace("/", "") 

enter image description here

+0

Ettore你天才!他們是一個目錄,或者我可以查找openrefine這樣的函數嗎? – Mac

+0

[官方文檔](https://github.com/OpenRefine/OpenRefine/wiki/Documentation-For-Users)可能是最好的開始,尤其是頁面「Grel string functions」和「recipes」。但是這個文檔比Python當然要少得多。請注意,如果您使用該語言比使用GREL更舒適,則Open Refine也可以使用Python/Jython。 –