2017-04-26 12 views
0

ダイヤルコードが角括弧内に入るように、列の3000の電話番号をすべて編集する必要があります。例えば: +49 089/514 6977 - 18 :を +49(089)514 6977 - パンダと推測18Python(Openrefine)でセル内のデータを操作する

Imが可能であるべきです。オープン調整を使用していますか?

+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を持っているがため、適用しますx [:4]を使用するアプローチは機能しません(米国の場合は+1、チェコの場合は+420)。私は正規表現 –

+0

@ VictorGを提案したいと思います。あなたは絶対に正しいので、私はそれらの場合の編集を行いました:) – zipa

+0

こんにちはZipa、あなたの応答のおかげで。いくつかの数字にすでに角括弧が付いている場合はどうなりますか? openrefineの 'column_name'を実際のカラム名に変更するだけですか? – Mac

0

オープンリファインを使用している場合は、次のように試すことができます。

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文字列関数"と "レシピ"のページを開始するのに最適な場所です。しかし、このドキュメンテーションはPythonのものよりもはるかに少ないです。 Open Refenerは、GRELと比べてこの言語に慣れていれば、Python/Jythonを使用することもできます。 –

関連する問題