前提・実現したいこと
csvファイルとして保存されている実験データを読み込み、グラフを作成するプログラミングを作成しています。バージョン(python3.7)
その際に以下のエラーが発生しました。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "C:\Users\user.spyder-py3\I_Vsweep一括動作特性.py", line 34, in <module> i.append([float(df['I1'][j])]) ValueError: could not convert string to float:
該当のソースコード
import matplotlib.pyplot as plt import pandas as pd import glob import os plt.rcParams['xtick.direction']='in' plt.rcParams['ytick.direction']='in' fig, ax = plt.subplots(1,1) col_names = ['D','V1','V2','I1','I2','R'] file_pass = glob.glob('F:/0911/素子1_21-40/*.csv') file_pass.sort(key = os.path.getmtime) c = 0 for file in file_pass: df = pd.read_csv(file, names = col_names) df = df.replace("'") v = ([]) i = ([]) c = c + 1 for j in range(216, len(df)): v.append([float(df['V1'][j])]) i.append([float(df['I1'][j])]) ax.plot(v, i, label = 'device '+ str(c)) ax.legend(bbox_to_anchor=(1.05,1),loc = 'upper left', borderaxespad=0) ax.set_yscale("log") ax.set_title('switching I-V') ax.set_xlabel("V") ax.set_ylabel("I")
試したこと
float(df['I1'][216])
Out[46]: -1.4169200000000002e-10
上記のようにfor文を用いずに変換すると正しく変換されているようなのです。
しかしながら、
for j in range(216,len(df)):
print(float(df['I1'][j]))
Traceback (most recent call last):
File "<ipython-input-48-e11b1cc39de7>", line 2, in <module>
print(float(df['I1'][j]))
ValueError: could not convert string to float:
上記に用に繰り返しを用いるとエラーが発生します。
また、ネットで調べてDecimalで変換するなどもやってみたのですがうまくいかなかったようです。
補足情報(FW/ツールのバージョンなど)
読み込むcsvファイルは下記のようになっています。
D ... R
0 SetupTitle ... NaN
1 PrimitiveTest ... NaN
2 TestParameter ... NaN
3 TestParameter ... NaN
4 TestParameter ... NaN
.. ... ... ...
247 DataValue ... 77221884.213974833
248 DataValue ... 73755911.3193631
249 DataValue ... 44300993.607999496
250 DataValue ... 1125314.1502002643
251 DataValue ...
[252 rows x 6 columns]
問題のI1列は以下のようになっています。
0 NaN
1 NaN
2 NaN
3 SMU
4 SMU2:MP
247 -1.28202E-08
248 -1.38294E-08
249 -2.37015E-08
250 -9.59732E-07
251
Name: I1, Length: 252, dtype: object
回答2件
あなたの回答
tips
プレビュー