2017-02-09 8 views
2

パンダと共通の操作は、Excelファイルからテーブルを読み込み、すべてのフィールドからセミコロンを削除することです。列は、混合データ型であることが多い。このような何かをするためにトラインとき、私はAtributeErrorに実行します。 for col in cols_to_check: df[col] = df[col].map(lambda x: x.replace(';',''))データフレーム全体から文字を削除する

AttributeError: 'float' object has no attribute 'replace'

私はUnicode文字、例えばに問題が発生した交換する前にstr()でそれをラップする場合これは非常に簡単な操作でExcelで for col in cols_to_check: df[col] = df[col].map(lambda x: str(x).replace(';',''))

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 3: ordinal not in range(128)

、それが取るすべては空の文字列で;を交換することです。私はそれをデータフレーム全体で、データ型を無視して同様にパンダでどうやって行うことができますか?または私は何かを逃していますか?

答えて

1

あなたがDataFrame.replaceと選択用のsubset使用することができます。

df = pd.DataFrame({'A':[1,2,3], 
        'B':[4,5,6], 
        'C':['f;','d:','sda;sd'], 
        'D':['s','d;','d;p'], 
        'E':[5,3,6], 
        'F':[7,4,3]}) 

print (df) 
    A B  C D E F 
0 1 4  f; s 5 7 
1 2 5  d: d; 3 4 
2 3 6 sda;sd d;p 6 3 

cols_to_check = ['C','D', 'E'] 

print (df[cols_to_check]) 
     C D E 
0  f; s 5 
1  d: d; 3 
2 sda;sd d;p 6 

df[cols_to_check] = df[cols_to_check].replace({';':''}, regex=True) 
print (df) 
    A B  C D E F 
0 1 4  f s 5 7 
1 2 5  d: d 3 4 
2 3 6 sdasd dp 6 3 
+0

おかげで、これは働いていました!私が見逃していたのは 'regex = True'でした。それがなければ 'replace'は部分的ではなく文字列全体を検索します(excelの全セル内容と同じです) – user3087386

+0

はい、そうです。受付いただきありがとうございます! – jezrael

+0

あなたの答えを少し更新することをお勧めします。私の質問では、データ型を列に混在させていることに言及します(列間だけでなく)。しかし、あなたの例では、一貫したデータ型を使用します。また、文字列で列をチェックするだけですが、 'df = df.replace({';': ''}、正規表現= True)' も同様に働きます。 '['a;'、1.02、 'b']'のように – user3087386

関連する問題