Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AttributeError: 'Series' object has no attribute 'real' using EIS_plot method #10

Open
swsyoon opened this issue Sep 15, 2020 · 6 comments

Comments

@swsyoon
Copy link

swsyoon commented Sep 15, 2020

I was able to fit an experimental data using ex.EIS_fit(params=params, circuit='R-RQ-RQ',weight_func='modulus')

However when I tried to plot the data using ex2.EIS_plot(legend='potential', bode='log', fitting='on'), it generates the error.

  File "~\Miniconda3\envs\impedance\lib\site-packages\PyEIS\PyEIS.py", line 4701, in EIS_plot
    ax.plot(self.circuit_fit[i].real, -self.circuit_fit[i].imag, lw=0, marker='o', ms=8, mec='r', mew=1, mfc='none', label='')

  File "~\Miniconda3\envs\impedance\lib\site-packages\pandas\core\generic.py", line 5136, in __getattr__
    return object.__getattribute__(self, name)

AttributeError: 'Series' object has no attribute 'real'

I am using python 3.7.9 in windows 10.

@mfjimenezmoreno
Copy link

Having the same problem when I follow the anexed tutorial (Doing this on Python 3.9.2).

I guess it has to do that the column is named 're' instead of 'real'? Seems to me that is fitting correctly, but fails at the moment it tries to plot.

@gimdeokhwan
Copy link

It is same issue as an "Error using Lin_kk function"

I've fixed the this issue, but have no authority of "pull request"
but I've tested attached code, works well.

Reason why issue happened is self.KK_circuit_fit[i].real and self.KK_circuit_fit[i].imag not aligned to array data format.

so it should be changed following
(I'm in office so not possible to upload the screen shot and code)

       #changed by Gim
        length_of_kk_circuit_fit = len(self.KK_circuit_fit[i])
        KK_circuit_fit_real = []
        KK_circuit_fit_imag = []
        for idx in range(length_of_kk_circuit_fit):
            KK_circuit_fit_real.append(self.KK_circuit_fit[i][idx+length_of_kk_circuit_fit].real)
            KK_circuit_fit_imag.append(self.KK_circuit_fit[i][idx + length_of_kk_circuit_fit].imag)

        KK_circuit_fit_real = np.array(KK_circuit_fit_real)
        KK_circuit_fit_imag = np.array(KK_circuit_fit_imag)
        self.KK_rr_re.append(residual_real(re=self.df[i].re, fit_re=KK_circuit_fit_real, fit_im=-KK_circuit_fit_imag))#relative residuals for the real part
        self.KK_rr_im.append(residual_imag(im=self.df[i].im, fit_re=KK_circuit_fit_real, fit_im=-KK_circuit_fit_imag)) #relative residuals for the imag part
        # changed by Gim
        
        #original source code
        #self.KK_rr_re.append(residual_real(re=self.df[i].re, fit_re=self.KK_circuit_fit[i].real, fit_im=-self.KK_circuit_fit[i].imag)) #relative residuals for the real part
        #self.KK_rr_im.append(residual_imag(im=self.df[i].im, fit_re=self.KK_circuit_fit[i].real, fit_im=-self.KK_circuit_fit[i].imag)) #relative residuals for the imag part

@FabianPascher
Copy link

One solution is to change the 4701 entry
from (original)
ax.plot(self.circuit_fit[i].real, -self.circuit_fit[i].imag, lw=0, marker='o', ms=8, mec='r', mew=1, mfc='none', label='')
to (my solution)
ax.plot(self.circuit_fit[i].values.real, -self.circuit_fit[i].values.imag, lw=0, marker='o', ms=8, mec='r', mew=1, mfc='none', label='')

@DouglasGuillen99
Copy link

One solution is to change the 4701 entry from (original) ax.plot(self.circuit_fit[i].real, -self.circuit_fit[i].imag, lw=0, marker='o', ms=8, mec='r', mew=1, mfc='none', label='') to (my solution) ax.plot(self.circuit_fit[i].values.real, -self.circuit_fit[i].values.imag, lw=0, marker='o', ms=8, mec='r', mew=1, mfc='none', label='')

@FabianPascher I want to apply your solution, I need to fit experimental data as well and I need to fix the same issue. Please reply if you are able to see my comment.

@DouglasGuillen99
Copy link

It is same issue as an "Error using Lin_kk function"

I've fixed the this issue, but have no authority of "pull request" but I've tested attached code, works well.

Reason why issue happened is self.KK_circuit_fit[i].real and self.KK_circuit_fit[i].imag not aligned to array data format.

so it should be changed following (I'm in office so not possible to upload the screen shot and code)

       #changed by Gim
        length_of_kk_circuit_fit = len(self.KK_circuit_fit[i])
        KK_circuit_fit_real = []
        KK_circuit_fit_imag = []
        for idx in range(length_of_kk_circuit_fit):
            KK_circuit_fit_real.append(self.KK_circuit_fit[i][idx+length_of_kk_circuit_fit].real)
            KK_circuit_fit_imag.append(self.KK_circuit_fit[i][idx + length_of_kk_circuit_fit].imag)

        KK_circuit_fit_real = np.array(KK_circuit_fit_real)
        KK_circuit_fit_imag = np.array(KK_circuit_fit_imag)
        self.KK_rr_re.append(residual_real(re=self.df[i].re, fit_re=KK_circuit_fit_real, fit_im=-KK_circuit_fit_imag))#relative residuals for the real part
        self.KK_rr_im.append(residual_imag(im=self.df[i].im, fit_re=KK_circuit_fit_real, fit_im=-KK_circuit_fit_imag)) #relative residuals for the imag part
        # changed by Gim
        
        #original source code
        #self.KK_rr_re.append(residual_real(re=self.df[i].re, fit_re=self.KK_circuit_fit[i].real, fit_im=-self.KK_circuit_fit[i].imag)) #relative residuals for the real part
        #self.KK_rr_im.append(residual_imag(im=self.df[i].im, fit_re=self.KK_circuit_fit[i].real, fit_im=-self.KK_circuit_fit[i].imag)) #relative residuals for the imag part

@gimdeokhwan I want to apply your solution, I need to fit experimental data as well and I need to fix the same issue. Please reply if you are able to see my comment.

@zleung9
Copy link

zleung9 commented Mar 8, 2023

One solution is to change the 4701 entry from (original) ax.plot(self.circuit_fit[i].real, -self.circuit_fit[i].imag, lw=0, marker='o', ms=8, mec='r', mew=1, mfc='none', label='') to (my solution) ax.plot(self.circuit_fit[i].values.real, -self.circuit_fit[i].values.imag, lw=0, marker='o', ms=8, mec='r', mew=1, mfc='none', label='')

@FabianPascher I've applied your solution and it worked. Note that one needs to change self.circuit_fit[i] to self.circuit_fit[i].values for all occurances in this file.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants