【发布时间】:2014-08-12 07:18:15
【问题描述】:
我正在尝试将数据从空格分隔文件正确导入到 pandas 数据框中,以便我可以正确绘制它。我的数据文件如下所示:
Vmeas -5.00E+000 -4.50E+000 -4.00E+000 -3.50E+000 ...
vfd3051 -3.20E-008 -1.49E-009 1.38E-008 -1.17E-008 ...
vfd3151 -3.71E-008 -6.58E-009 -6.58E-009 -6.58E-009 ...
vfd3251 -4.73E-008 3.59E-009 8.68E-009 -1.68E-008 ...
vfd3351 -2.18E-008 -3.71E-008 3.60E-009 -3.20E-008 ...
所以测试位置原来是在行中,列的电压向右增加至20V。
我将数据文件读入数据框的代码是:
if __name__ == '__main__':
file_path = str(input("Enter the filename to open: "))
save = str(input('Do you wish to save a pdf of the IV plots? (y/n): '))
df = pd.read_csv(file_path, index_col="Vmeas", delim_whitespace=True, header=0)
df = df.T
df.reset_index(inplace=True)
df.index.names = ['Voltage']
df.columns.names = ['Die_numbers']
df.drop('index',axis=1, inplace=True)
make_plots(df, save)
实际绘图由以下人员完成:
def make_plots(df, save):
voltage = np.arange(-5, 20, 0.5)
plt.figure(figsize=(10, 7))
for col in df:
plt.plot(voltage, col, legend=False)
plt.show()
起初,我遇到了 pandas 将电压视为字符串的问题,因为 pandas 不能很好地处理浮点索引。尝试最初是在 0 处开始绘制二极管电流 - 电压关系图。(http://i.imgur.com/wgIZCyq.jpg)然后,我重新索引它,但随后绘制仍然不起作用。现在,我重新索引了数据框,删除了旧的索引列,当我检查 df.head() 时,一切看起来都正确:
Die_numbers vfd3051 vfd3151 vfd3251 vfd3351
Voltage
0 -3.202241e-08 -3.711351e-08 -4.728576e-08 -2.184733e-08
1 -1.493095e-09 -6.580329e-09 3.594383e-09 -3.710431e-08
2 1.377107e-08 -6.581644e-09 8.683344e-09 3.595368e-09
除了现在我一直在 mpl 中遇到 ValueError。我认为这与 col 值是字符串而不是浮点数有关,我不明白,因为它之前正确地打印了电流。
诚然,我是 pandas 的新手,但我似乎每时每刻都停下来,毫无疑问,由于我的无知,但这越来越令人厌烦。有一个更好的方法吗?也许我应该忽略日志文件的第一行?我可以在读取文件时从科学计数法转换吗?继续插电?
谢谢。
df.info() 是: Int64Index:51 个条目,0 到 50 列:1092 个条目,vfd3051 到 vfd6824 数据类型:float64(1092)
一切似乎都正确加载到 pandas 中,但 mpl 不喜欢数据中的某些内容。这些列是浮点数,我没有使用整数索引。如果将列名添加为我的第一行,则这些列将被视为 str 或 obj 类型。错误是:
Traceback (most recent call last):
File "D:\Python\el_plot_top_10\IV_plot_all.py", line 51, in <module>
make_plots(df, save)
File "D:\Python\el_plot_top_10\IV_plot_all.py", line 21, in make_plots
plt.plot(voltage, col, legend=False)
File "C:\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 2987, in plot
ret = ax.plot(*args, **kwargs)
File "C:\Anaconda3\lib\site-packages\matplotlib\axes.py", line 4139, in plot
for line in self._get_lines(*args, **kwargs):
File "C:\Anaconda3\lib\site-packages\matplotlib\axes.py", line 319, in _grab_next_args
for seg in self._plot_args(remaining, kwargs):
File "C:\Anaconda3\lib\site-packages\matplotlib\axes.py", line 278, in _plot_args
linestyle, marker, color = _process_plot_format(tup[-1])
File "C:\Anaconda3\lib\site-packages\matplotlib\axes.py", line 131, in _process_plot_format
'Unrecognized character %c in format string' % c)
ValueError: Unrecognized character f in format string
【问题讨论】:
-
你能发布 pandas/numpy 版本吗? soln 对我来说应该看起来不错。也显示
df.info()。 -
numpy 版本为 1.8.1,pandas:0.14.1 和 python 3.4.1
标签: python matplotlib pandas dataframe transpose