2016-06-21 38 views
4

私は非常に大きなデータフレームを持っていますが、すべての行を繰り返し処理しないようにし、列全体を16進文字列からintに変換したいとします。 astypeで文字列を正しく処理することはできませんが、単一のエントリで問題はありません。データ型がベース16であることをastypeに伝える方法はありますか?pandasデータフレーム列を16進文字列からintに変換する

IN: 
import pandas as pd 
df = pd.DataFrame(['1C8','0C3'], columns=['Command0']) 
df['Command0'].astype(int) 
OUT: 
ValueError: invalid literal for int() with base10: '1C8' 

これは機能しますが、行の反復を避けたいです。

for index, row in df.iterrows(): 
    print(row['Command0']) 

でそれを読んで、明示的にフォーマットをしても良いだろうという、その後は何か、それを伝える方法がある場合、私はそうCSV pd.read_csv(open_csv, nrows=20)からこれをで読んでいます!

答えて

5

applyを使用できます。

df.Command0.apply(lambda x: int(x, 16)) 
>>> 
0 456 
1 195 
Name: Command0, dtype: int64 

そして、あなたはconvertersパラメータを使用してpd.read_csvコールでこれを行うことができます答えを

df = pd.read_csv("path.txt", converters={"Command0": lambda x: int(x, 16)}) 
+1

感謝。私はまた、あなたが明示的にコンバータのケースのベースにそれを伝える限り、あなたは '0x'を適用する必要はないことを発見しました。 'df = pd.read_csv(open_csv、nrows = 20、コンバーター= {'Command0':ラムダx:int(x、16)}) – kaminsknator

関連する問題