2017-06-12 15 views
-2

私はPandasで次の表を参照してください。Python:pandasデータフレームの特定の要素/セルに関数を適用します

+--------+--------+--------+-----+ 
| A | B | C | D | 
+--------+--------+--------+-----+ 
| foo | b'bar0 | b'foo0 | 253 | 
| b'bar0 | bar | blah | 485 | 
+--------+--------+--------+-----+ 

私はb'で始まるセル内の各要素に関数をAPPYたいです。 機能は次のとおりです。

def elementdecode(data,password): 
    aa=row[2:-1] 
    bb=aa.encode() 
    cc = bb.decode('unicode-escape').encode('ISO-8859-1') 
    return (decode(cc, password).decode()) 

背景:私は彼らに正常値と暗号化された値を持つCSVファイルを持っている、と私は暗号化されていない要素に復号化方法を適用したいと思います。私の計画は、csvをpandasに読み込み、解読機能を暗号化されたセル(例えば、'bで始まるセル)に適用することです。暗号化が実行されると、データを新しいCSVにエクスポートし直します。ループを使うのではなく、私はapplymapを使うことを考えていましたが、特定の要素に対してのみ行う方法はわかりません。

おかげ

答えて

1

は、あなたはそれを試したことがありますか?

def elementdecode(data,password): 
    #if the first condition if not met, the second is not evaluated 
    if (type(x) == str) and ("\'b" in x): 
     aa=row[2:-1] 
     bb=aa.encode() 
     cc = bb.decode('unicode-escape').encode('ISO-8859-1') 
     return (decode(cc, password).decode()) 
    else: 
     return x 

df.applymap(lambda x: elementdecode(x,password)) 
+0

このパフォーマンスはどのように優れていますか? 'if'ステートメントはその操作を非常に遅くしませんか? – valenzio

+0

@valenzio私はそうは思わない、あなたはそれを別のやり方でフィルタリングしなければならない、あなたのデータの特異性に応じてifステートメントにあるものを変更することでより速くすることができるが、それは働いている? – Tbaki

+0

私の質問が更新されました。私のデータフレームの問題は、文字列、整数、日付、NaNの形式が異なることです。あなたのアプローチは、すべてのエントリが文字列の場合にのみ機能します。とにかく私はそれらをCSVに書き戻しているので、すべてのエントリを文字列にフォーマットすることができると思います。私は報告する。 – valenzio

関連する問題