2016-08-26 9 views
12

PandasにSQLクエリを読み込み、値がdtype 'object'として入力されました。ただし、文字列、日付、整数です。私は日付 'オブジェクト'をPandas datetime dtypeに変換することができますが、文字列と整数を変換しようとするとエラーが発生します。ここでPandas:dtype 'object'をintに変換する

は一例です:

>>> pd.to_datetime(df['date']) 
1 2016-05-22 
2 2016-05-29 
3 2016-05-22 
4 2016-05-22 
Name: date, dtype: datetime64[ns] 

をしかし、整数にdf['purchase']を変換しようとしたとき、私はエラーを取得する:日時にdf['date']の変換

>>> import pandas as pd 
>>> df = pd.read_sql_query('select * from my_table', conn) 
>>> df 
    id date   purchase 
1 abc1 2016-05-22 1 
2 abc2 2016-05-29 0 
3 abc3 2016-05-22 2 
4 abc4 2016-05-22 0 

>>> df.dtypes 
id   object 
date  object 
purchase object 
dtype: object 

作品

>>> df['purchase'].astype(int) 
.... 
pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)() 
pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)() 

TypeError: long() argument must be a string or a number, not 'java.lang.Long' 

注:私はを試したときに同様のエラーが発生する

文字列に変換しようとすると、何も起こっていないようです。

>>> df['id'].apply(str) 
1 abc1 
2 abc2 
3 abc3 
4 abc4 
Name: id, dtype: object 
+2

にラベルを付け、私は 'DF [ '購入']しようと、推測している。astype(STR).astype( int) ' – piRSquared

+2

文字列dtypeはありません。それはオブジェクトのままです。もう1つはもっと一般的な 'pd.to_numeric(df ['purchase'])'を試してください。それが成功すれば '.astype(int)'を追加することができます。 – ayhan

+0

@piRSquared - はい、うまくいきました。 – cyril

答えて

24

@piRSquaredによるコメントに基づいて私の仕事の答えを文書化してください。

文字列に変換してから整数にする必要がありました。

>>> df['purchase'].astype(str).astype(int) 
+1

strとintに最初に変換する必要があります。なぜこのようなのか分かりません。 –

-1

それは簡単

pd.factorize(df['purchase'])[0] 

因子分解オブジェクト列だと、新たな整数を返しますが