前提・実現したいこと
pandasでcsvから読み込んだDataframeの特定列データ型をobjectからfloatへ変更したい。
プログラミングを勉強し始めて1か月にも満たない初学者です。
分からないことも多く知識も少ないので、拙いコード・説明であること先にお詫び申し上げます。
発生している問題・エラーメッセージ
NO. int64 Time datetime64[ns] jac object temp object top object dtype: object
datetime変換まで実行後Dataframe
元のCSVデータ
ベンダ,"GRAPHTEC Corporation" モデル,"GL240" バージョン,"Ver1.52 " 最大CH数,10 WL開始CH,10 最大ロジックCH数,4 Logic/Pulse,Off,Off 温度単位,C 測定間隔,2s 測定点数,10524 トリガ点,0 開始時刻,2022-11-04,09:11:43 終了時刻,2022-11-04,15:02:31 トリガ時刻,2022-11-04,09:11:44 アンプ設定 CH,信号名,アンプ,入力,レンジ,温度レンジ,フィルタ,スパン,,単位,線色,,,線幅 CH1," CH 1","M",TEMP,TC_K,2000degC,Off,+100.0,+0.0,[degC],28,5,6,0 CH2," CH 2","M",TEMP,TC_K,2000degC,Off,+100.0,+0.0,[degC],0,13,23,0 CH4," CH 4","M",TEMP,TC_K,2000degC,Off,+100.0,+0.0,[degC],21,0,21,0 演算設定 CH,左項,演算子,右項,スケーリング,スパン,,単位 測定値 番号,日付/時間,ms,CH1,CH2,CH4,Alarm1-10,AlarmOut NO.,Time,ms,"degC","degC","degC","A1234567890","AO1234" 1,2022/11/04 09:11:44, 0,+ 20.0,+ 22.3,+ 24.3,LLLLLLLLLL,LLLL 2,2022/11/04 09:11:46, 0,+ 20.0,+ 22.3,+ 24.4,LLLLLLLLLL,LLLL 3,2022/11/04 09:11:48, 0,+ 20.0,+ 22.3,+ 24.4,LLLLLLLLLL,LLLL 4,2022/11/04 09:11:50, 0,+ 20.0,+ 22.4,+ 24.4,LLLLLLLLLL,LLLL 5,2022/11/04 09:11:52, 0,+ 20.0,+ 22.3,+ 24.4,LLLLLLLLLL,LLLL 6,2022/11/04 09:11:54, 0,+ 20.0,+ 22.4,+ 24.4,LLLLLLLLLL,LLLL 7,2022/11/04 09:11:56, 0,+ 20.0,+ 22.3,+ 24.6,LLLLLLLLLL,LLLL 8,2022/11/04 09:11:58, 0,+ 20.0,+ 22.3,+ 24.6,LLLLLLLLLL,LLLL 9,2022/11/04 09:12:00, 0,+ 20.0,+ 22.3,+ 24.6,LLLLLLLLLL,LLLL 10,2022/11/04 09:12:02, 0,+ 19.9,+ 22.3,+ 24.6,LLLLLLLLLL,LLLL 11,2022/11/04 09:12:04, 0,+ 19.9,+ 22.3,+ 24.6,LLLLLLLLLL,LLLL 12,2022/11/04 09:12:06, 0,+ 20.0,+ 22.3,+ 24.6,LLLLLLLLLL,LLLL 13,2022/11/04 09:12:08, 0,+ 20.0,+ 22.4,+ 24.6,LLLLLLLLLL,LLLL 14,2022/11/04 09:12:10, 0,+ 20.0,+ 22.4,+ 24.6,LLLLLLLLLL,LLLL 15,2022/11/04 09:12:12, 0,+ 20.0,+ 22.3,+ 24.7,LLLLLLLLLL,LLLL 16,2022/11/04 09:12:14, 0,+ 20.0,+ 22.4,+ 24.7,LLLLLLLLLL,LLLL 17,2022/11/04 09:12:16, 0,+ 20.0,+ 22.4,+ 24.7,LLLLLLLLLL,LLLL 18,2022/11/04 09:12:18, 0,+ 20.0,+ 22.5,+ 24.7,LLLLLLLLLL,LLLL 19,2022/11/04 09:12:20, 0,+ 20.0,+ 22.5,+ 24.8,LLLLLLLLLL,LLLL 20,2022/11/04 09:12:22, 0,+ 20.0,+ 22.5,+ 24.8,LLLLLLLLLL,LLLL <中略> 299,2022/11/04 09:21:40, 0,+ 20.0,+ 22.2,+ 33.1,LLLLLLLLLL,LLLL 300,2022/11/04 09:21:42, 0,+ 19.9,+ 22.2,+ 33.2,LLLLLLLLLL,LLLL 301,2022/11/04 09:21:44, 0,+ 20.0,+ 22.1,+ 33.2,LLLLLLLLLL,LLLL
該当のソースコード
Spyder(Python3)
1import pandas as pd 2 3df = pd.read_csv("C:〇〇〇.CSV", encoding="shift-jis",header=23)#csvファイルの指定 4 5df = df.rename(columns={'degC':'jac','degC.1': 'temp','degC.2': 'top'})#column名の変更 6df = df.drop(columns=['ms','A1234567890', 'AO1234'])#余計な列の削除 7df = df.drop(range(2)) 8df = df.dropna(how='all', axis=1)#余計な行の削除 9df['Time'] = pd.to_datetime(df['Time']) #Timeをobjectからdatetimeに変換 10 11if type(df.at[2,'jac']) != float: #元データがfloat型ではなかったときは変換する 12 df['jac']=df['jac'].str.replace(' ', "") 13 df['jac'].astype(float) 14 df['temp']=df['temp'].str.replace(' ', "") 15 df['temp'].astype(float) 16 df['top']=df['top'].str.replace(' ', "") 17 df['top'].astype(float) 18 19print(df.dtypes)
試したこと
ifを使用せず、下記コード部分のみ実行にて列要素がfloat型に変換されていることを確認。
df['jac']=df['jac'].str.replace(' ', "") df['jac'].astype(float) >>2 20.0 >>3 20.0 >>4 20.0 >>5 20.0 >>6 20.0 >> ... >>301 20.0 >>name: jac, Length: 301, dtype: float64
しかしながら一要素のみ抽出して確認するとstr型になっている
print(type(df.at[3,'jac'])) >><class 'str'>

回答1件
あなたの回答
tips
プレビュー