2017-08-18 5 views
3

これは私の作業コードです。これはWebサイトからExcelファイルをダウンロードしています。約40秒かかります。Pandasのデータフレームで、オブジェクトから文字列への列データ型の変換ができません

このコードを実行すると、Key1、Key2、およびKey3の列がオブジェクトのdtypeであることがわかります。 key1とkey2は英数字の値しか持たないようにデータフレームを整理しました。それでもパンダはそれをオブジェクトdtypeとして保持しています。私は、(MS Excelのように)Key1とKey2を連結して、deviceidという別の列を作成する必要があります。私は2つの列がオブジェクトdtypesであるので、私は2つの列に参加できないことに気づきます。新しい列を作成できるように、文字列に変換するにはどうすればよいですか?

import pandas as pd 
import urllib.request 
import time 

start=time.time() 
url="https://www.misoenergy.org/Library/Repository/Market%20Reports/20170816_da_bcsf.xls" 
cnstsfxls = urllib.request.urlopen(url) 
xlsf = pd.ExcelFile(cnstsfxls) 
dfsf = xlsf.parse("Sheet1",skiprows=3) 
dfsf.drop(dfsf.index[len(dfsf)-1],inplace=True) 
dfsf.drop(dfsf[dfsf['Device Type'] == 'UN'].index, inplace=True) 
dfsf.drop(dfsf[dfsf['Device Type'] == 'UNKNOWN'].index, inplace=True) 
dfsf.drop(['Constraint Name','Contingency Name', 'Constraint Type','Flowgate Name'],axis=1, inplace=True) 
end=time.time() 
print("The entire process took - ", end-start, " seconds.") 
+0

あなたがしようとしました:

すると、この試してみてください。 'DF [[ 'キー1'、 'KEY2'、 'KEY3']]をastype( str) '? –

+0

私はこれを試しましたが、a = dfsf.Key1.astype(str)であり、オブジェクトとしてまだ保持されています。なぜそれがオブジェクト型を保持しているのか理解していません。 –

+0

あなたの列にタイプが混在している可能性があります... –

答えて

0

こちらのところは分かりにくいかもしれません。しかし、たとえばdeviceid = RCH417のようにKey1 = RCHKey2 = 417の列を作成する場合は、両方の列がオブジェクト型であってもdfsf['deviceid'] = dfsf['Key1'] + dfsf['Key2']が正常に機能します。

# Check value types 
dfsf.dtypes 

# Add your desired column 
dfsf['deviceid'] = dfsf['Key1'] + dfsf['Key2'] 

# Inspect columns of interest 
keep = ['Key1', 'Key2', 'deviceid'] 
df_keys = dfsf[keep] 
print(df_keys.dtypes) 

enter image description here

print(df_keys.head()) 

enter image description here

+0

問題を解決しましたか? – vestland

関連する問題