2017-05-02 4 views
0

DataFrame内のすべてのデータを大文字に変換したいとします。私は列名からの変換を開始すると、私はこのエラーを取得:DataFrameでのユニコード名の処理

コード:

xl = pd.ExcelFile(target_processed_directory + filename) 
# check sheet names 
print(xl.sheet_names[0]) 

# sheet to pandas dataframe 
df = xl.parse(xl.sheet_names[0]) 

# make whole dataframe uppercase 
df.columns = map(str.upper, df.columns) 

エラー:

TypeError: descriptor 'upper' requires a 'str' object but received a 'unicode' 

答えて

0

マッピングstr.upperするのではなく、リストの内包表記を使用してみてください。 Pythonの2.7で

df.columns = [c.upper() for c in df.columns] 

、文字列とユニコード間の区別は、メソッドの名前が同じであるという事実にもかかわらず、Unicodeオブジェクトに文字列の方法を適用するからあなたを妨げています。

2

パンダを使用するときは、forループをPythonで回避することをお勧めします。通常、map()も避けたいと考えています。それらは物事を行うためのゆっくりした方法です。あなたが良い習慣を作りたいのであれば、いつでもそれらを避けることができます。

パンダの文字列シーケンスで使用できる高速ベクトル化文字列操作があります。この場合は、あなたがしたい:

df.columns = df.columns.str.upper() 

ドキュメント:多分あなたが考えるhttp://pandas.pydata.org/pandas-docs/stable/text.html

+0

'df.columns = df.columns.str.upper()';) – jezrael

+0

@jezrael:十分なフェア、私はそれを変更しました。 –

+0

が今よりはるかに優れています。 – jezrael

関連する問題