Pandas数据帧处理与绘图

2024-06-08 02:02:40 发布

您现在位置:Python中文网/ 问答频道 /正文

使用winpython3.4,matplotlib1.3.1,我从mysql数据库中提取数据帧的数据。我从查询中得到的原始数据帧如下所示:

            wafer_number test_type  test_pass  x_coord  y_coord  test_el_id wavelength intensity
        0       HT2731      T2          1       38       54          24      288.68   4413
        1       HT2731      T2          1       40       54          25      257.42   2595
        2       HT2731      T2          1       50       54          28      300.00   2836
        3       HT2731      T2          1       52       54          29      300.00   2862
        4       HT2731      T2          1       54       54          30      300.00   3145
        5       HT2731      T2          1       56       54          31      300.00   2804
        6       HT2731      T2          1       58       54          32      255.69   2803
        7       HT2731      T2          1       59       54          33      257.23   2991
        8       HT2731      T2          1       60       54          34      262.45   3946
        9       HT2731      T2          1       62       54          35      291.84   9398
        10      HT2801      T2          1       38       55          54      288.68   4125
        11      HT2801      T2          1       38       56          55      265.25   4258

我需要的是在x轴和y轴上分别绘制波长和强度,每个不同的晶圆编号作为它自己的系列。我需要保留x_coord和y_coord变量,这样我就可以在以后通过单击它们并将它们添加到列表中来识别突出的数据点。等我把这些东西画好后我会把它弄出来的。在

我认为使用内置的dataframes绘图功能需要执行pivot_table方法

^{pr2}$

在我的数据帧上,然后将数据帧转换为:

        wafer_number    HT2478  HT2625  HT2644  HT2671  HT2673  HT2719  HT2731  HT2796  HT2801
 x_coord  y_coord   wavelength                                  
    27      35  289.07   NaN     NaN     NaN     5137    NaN     NaN     NaN     NaN     NaN
            36  250.88   4585    NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
            37  260.90   NaN     NaN     NaN     NaN     4270    NaN     NaN     NaN     NaN
            38  288.87   NaN     NaN     NaN     8191    NaN     NaN     NaN     NaN     NaN
            40  259.74   NaN     NaN     NaN     NaN     17027   NaN     NaN     NaN     NaN
            41  259.74   NaN     NaN     NaN     NaN     18742   NaN     NaN     NaN     NaN
            42  259.74   NaN     NaN     NaN     NaN     34098   NaN     NaN     NaN     NaN
    28      34  268.27   NaN     NaN     NaN     NaN     2080    NaN     NaN     NaN     NaN
            38  257.42   7727    NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
            44  260.13   NaN     NaN     NaN     NaN     55329   NaN     NaN     NaN     NaN

但现在索引是x,y坐标和波长的多重索引,所以当我打印wl vs列时

plt.scatter(wl_vs_int.wavelength, wl_vs_int.columns)

我得到属性错误:

AttributeError: 'DataFrame' object has no attribute 'wavelength'

我尝试将dataframe重新索引回默认索引,但结果仍然是“dataframe”对象没有“wavelength”属性。在

必须有更好的方法来重新排列数据帧,以便通过内置的数据帧绘制功能实现这一点,或者只绘制选定列与其他列(列是动态的)。我对python和pandas显然是新手,但我花了好几天的时间尝试用不同的方法来做这件事,但没有结果。任何帮助都将不胜感激。谢谢。在


Tags: 数据方法testnumber绘制nanvs波长
1条回答
网友
1楼 · 发布于 2024-06-08 02:02:40

分别在x轴和y轴上绘制波长和强度 每个不同的晶片编号都是自己的系列,一个可以分组 数据写入wafer_number,然后处理每组

import pandas as pd
from StringIO import StringIO
import matplotlib.pyplot as plt

data = \
"""wafer_number,test_type,test_pass,x_coord,y_coord,test_el_id,wavelength,intensity
HT2731,T2,1,38,54,24,288.68,4413
HT2731,T2,1,40,54,25,257.42,2595
HT2731,T2,1,50,54,28,300.00,2836
HT2731,T2,1,52,54,29,300.00,2862
HT2731,T2,1,54,54,30,300.00,3145
HT2731,T2,1,56,54,31,300.00,2804
HT2731,T2,1,58,54,32,255.69,2803
HT2731,T2,1,59,54,33,257.23,2991
HT2731,T2,1,60,54,34,262.45,3946
HT2731,T2,1,62,54,35,291.84,9398
HT2801,T2,1,38,55,54,288.68,4125
HT2801,T2,1,38,56,55,265.25,4258"""

df = pd.read_csv(StringIO(data),sep = ',')
dfg = df.groupby('wafer_number')

colors = 'bgrcmyk'
fig, ax = plt.subplots()
for i,k in enumerate(dfg.groups.keys()):
    currentGroup = df.loc[dfg.groups[k]]
    color = colors[i % len(colors)]
    ax.plot(currentGroup['wavelength'].values,currentGroup['intensity'].values,\
            ls='', color = color, label = k, marker = 'o', markersize = 8)
legend = ax.legend(loc='upper center', shadow=True)
plt.xlabel('wavelength')
plt.ylabel('intensity')
plt.show()

相关问题 更多 >

    热门问题