2016-09-01 10 views
-1

私はループパンダ - データフレーム内の各列のスペースを削除する方法は?

for c in data.columns: data[c] = data[c].str.strip().replace(',', '').replace('\'', '').replace('\"', '').strip()

のためにこれを使用して各列のデータにスペース、アポストロフィ、および二重引用符を削除しようとしているが、私はこのエラーを取得しておいてください。

AttributeError: 'Series' object has no attribute 'strip'

データがありますデータフレームは、Excelファイルから入手されたものである。

xl = pd.ExcelFile('test.xlsx'); data = xl.parse(sheetname='Sheet1')

何か不足していますか?私はstrを追加しましたが、それは役に立たなかった。これを行うより良い方法はありますか?

テキストが異なる可能性があるので、data['column label']のような列ラベルは使用しません。私は各列を繰り返し、上記の文字を削除したいと思います。

着信データ:

id city country 1 Ontario Canada 2 Calgary ' Canada' 3 'Vancouver Canada

所望の出力:

id city country 1 Ontario Canada 2 Calgary Canada 3 Vancouver Canada

+0

[DataFrame.replace()](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html) – MaxU

+0

@MaxU私はパンダに精通していませんが、あなたは見出し/後ろのスペースを取り除くつもりですか? – medev21

+0

サンプルデータセットと希望するデータセットを投稿してください(交換後) – MaxU

答えて

1

UPDATE:あなたのサンプルDFを使用して:

In [80]: df 
Out[80]: 
    id   city country 
0 1  Ontario Canada 
1 2 Calgary ' Canada' 
2 3 'Vancouver Canada 

In [81]: df.replace(r'[,\"\']','', regex=True).replace(r'\s*([^\s]+)\s*', r'\1', regex=True) 
Out[81]: 
    id  city country 
0 1 Ontario Canada 
1 2 Calgary Canada 
2 3 Vancouver Canada 

OLD答え:

あなたはDataFrame.replace()メソッドを使用することができます

In [75]: df.to_dict('r') 
Out[75]: 
[{'a': ' x,y ', 'b': 'a"b"c', 'c': 'zzz'}, 
{'a': "x'y'z", 'b': 'zzz', 'c': ' ,s,,'}] 


In [76]: df 
Out[76]: 
     a  b  c 
0 x,y a"b"c  zzz 
1 x'y'z zzz ,s,, 

In [77]: df.replace(r'[,\"\']','', regex=True).replace(r'\s*([^\s]+)\s*', r'\1', regex=True) 
Out[77]: 
    a b c 
0 xy abc zzz 
1 xyz zzz s 

r'\1'は - numbered capturing RegEx group

です
+0

ありがとう、これは多くの助けになります。一つの最後のことは、 'r '\ 1'があることに気付きました。実際に何をしていますか? – medev21

+0

@ medev21、私は私の答えに短い説明を追加しました - chekしてください – MaxU

0

データ[C]の値を返さない、それはシリーズ(データの列全体)を返します。

ストリップ操作は、列df.apply全体に適用できます。この方法でストリップ機能を適用することができます。

+0

@Adam_Hughesは、次の場合は、どこに 'apply'を追加しますか?パンダに精通していない – medev21