2016-08-23 10 views
2

pandasデータフレームの単一の列を型文字列に変換するにはどうすればよいですか?私は線形回帰を実行すると、郵便番号はカテゴリではなく数値として扱われるように、私は郵便番号を文字列に変換する必要がある以下の住宅データのdfで。ありがとう!あなたがCategorical列を取得したい場合は、あなたをpandas dataframe列型を文字列またはカテゴリに変換する

df.zipcode = zipcode.astype(str) 

df = pd.DataFrame({'zipcode': {17384: 98125, 2680: 98107, 722: 98005, 18754: 98109, 14554: 98155}, 'bathrooms': {17384: 1.5, 2680: 0.75, 722: 3.25, 18754: 1.0, 14554: 2.5}, 'sqft_lot': {17384: 1650, 2680: 3700, 722: 51836, 18754: 2640, 14554: 9603}, 'bedrooms': {17384: 2, 2680: 2, 722: 4, 18754: 2, 14554: 4}, 'sqft_living': {17384: 1430, 2680: 1440, 722: 4670, 18754: 1130, 14554: 3180}, 'floors': {17384: 3.0, 2680: 1.0, 722: 2.0, 18754: 1.0, 14554: 2.0}}) 
print (df) 
     bathrooms bedrooms floors sqft_living sqft_lot zipcode 
722   3.25   4  2.0   4670  51836 98005 
2680  0.75   2  1.0   1440  3700 98107 
14554  2.50   4  2.0   3180  9603 98155 
17384  1.50   2  3.0   1430  1650 98125 
18754  1.00   2  1.0   1130  2640 98109 

答えて

0

文字列型に列を変換するには、astypeを使用する(つまりは、それ自体がパンダでオブジェクト列になります)あなたがastypeが必要

df.zipcode = zipcode.astype('category') 
+0

ご返信ありがとうございます。これらのメソッド(と他のもの)を試すと、同じエラーが発生します: 'train_more_features ['zipcode'] = pd.Categorical(train_more_features.zipcode)' '値はDataFrameからスライスのコピーに設定しようとしています。 代わりに.loc [row_indexer、col_indexer] = valueを使用してください。 – jklaus

5

:関数にパラメータ'category'を渡すことができます。 categoricalに変換する

df['zipcode'] = df.zipcode.astype(str) 
#df.zipcode = df.zipcode.astype(str) 

df['zipcode'] = df.zipcode.astype('category') 
#df.zipcode = df.zipcode.astype('category') 

別の解決策はCategoricalある:データと

df['zipcode'] = pd.Categorical(df.zipcode) 

サンプル:

import pandas as pd 

df = pd.DataFrame({'zipcode': {17384: 98125, 2680: 98107, 722: 98005, 18754: 98109, 14554: 98155}, 'bathrooms': {17384: 1.5, 2680: 0.75, 722: 3.25, 18754: 1.0, 14554: 2.5}, 'sqft_lot': {17384: 1650, 2680: 3700, 722: 51836, 18754: 2640, 14554: 9603}, 'bedrooms': {17384: 2, 2680: 2, 722: 4, 18754: 2, 14554: 4}, 'sqft_living': {17384: 1430, 2680: 1440, 722: 4670, 18754: 1130, 14554: 3180}, 'floors': {17384: 3.0, 2680: 1.0, 722: 2.0, 18754: 1.0, 14554: 2.0}}) 
print (df) 
     bathrooms bedrooms floors sqft_living sqft_lot zipcode 
722   3.25   4  2.0   4670  51836 98005 
2680  0.75   2  1.0   1440  3700 98107 
14554  2.50   4  2.0   3180  9603 98155 
17384  1.50   2  3.0   1430  1650 98125 
18754  1.00   2  1.0   1130  2640 98109 

print (df.dtypes) 
bathrooms  float64 
bedrooms   int64 
floors   float64 
sqft_living  int64 
sqft_lot   int64 
zipcode   int64 
dtype: object 

df['zipcode'] = df.zipcode.astype('category') 

print (df) 
     bathrooms bedrooms floors sqft_living sqft_lot zipcode 
722   3.25   4  2.0   4670  51836 98005 
2680  0.75   2  1.0   1440  3700 98107 
14554  2.50   4  2.0   3180  9603 98155 
17384  1.50   2  3.0   1430  1650 98125 
18754  1.00   2  1.0   1130  2640 98109 

print (df.dtypes) 
bathrooms  float64 
bedrooms   int64 
floors   float64 
sqft_living  int64 
sqft_lot   int64 
zipcode  category 
dtype: object 
+0

'astype'ではうまくいきませんか? – jezrael

+0

'df.zipcode = df.zipcode.astype( 'category')'が動作します。エラーメッセージとdtypesは正しく表示されません。しかし、sklearn linear_modelはint型のときと同じ重みを割り当てます。タイプstr 'df.zipcode = df.zipcode.astype(str)' - > '値は、DataFrameからスライスのコピーに設定しようとしています。 .locを使ってみてください[row_indexer、col_indexer] = value代わりに 'zipcodeはtypeオブジェクトとして表示され、linear_modelは以前と同じ重みを与えます。郵便番号がstrであったgraphlabで割り当てを再作成しようとしましたが、トレーニングエラーはずっと低くなりました。再度、感謝します! – jklaus

関連する問題