Python Forum
dtype in not working in mad() function
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
dtype in not working in mad() function
#1
Given below is python pandas program using mad()function :
import pandas as pd
import numpy as np
diSales= { 2016:{'qtr1':34500,'qtr2':56000,'qtr3':47000,'qtr4':49000},
           2017:{'qtr1':44900,'qtr2':46100,'qtr3':57000,'qtr4':59000},
           2018:{'qtr1':54500,'qtr2':51000,'qtr3':57000,'qtr4':58500},
           2019:{'qtr1':61000}
         }
df = pd.DataFrame(diSales)
ks = df.mad(axis = 1)
print(ks)
My question is how can i change dtype of this pandas dataframe , by default it is showing float64 but i want to change it to int32 ? When i am trying command
ks = df.mad(axis = 1, dtype = int32)
then it is showing error Plz help
Reply
#2
ks = df.mad(axis = 1).astype('int32')
Reply
#3
Ability to use NaN values with columns of integer type is latest pandas feature (and still experimental).
As of Pandas 0.24.x you can do this, e.g.

import pandas as pd
import numpy as np
diSales= { 2016:{'qtr1':34500,'qtr2':56000,'qtr3':47000,'qtr4':49000},
           2017:{'qtr1':44900,'qtr2':46100,'qtr3':57000,'qtr4':59000},
           2018:{'qtr1':54500,'qtr2':51000,'qtr3':57000,'qtr4':58500},
           2019:{'qtr1':61000}
         }
df = pd.DataFrame(diSales, dtype=pd.Int32Dtype())
df.mad(axis=0)
df.info() returns integer dtype, but df.mad still returns float.

Output:
2016 6062.5 2017 6250.0 2018 2500.0 2019 0.0 dtype: float64
Reply
#4
(Jul-20-2019, 08:48 AM)scidam Wrote: Ability to use NaN values with columns of integer type is latest pandas feature (and still experimental).
As of Pandas 0.24.x you can do this, e.g.

import pandas as pd
import numpy as np
diSales= { 2016:{'qtr1':34500,'qtr2':56000,'qtr3':47000,'qtr4':49000},
           2017:{'qtr1':44900,'qtr2':46100,'qtr3':57000,'qtr4':59000},
           2018:{'qtr1':54500,'qtr2':51000,'qtr3':57000,'qtr4':58500},
           2019:{'qtr1':61000}
         }
df = pd.DataFrame(diSales, dtype=pd.Int32Dtype())
df.mad(axis=0)
df.info() returns integer dtype, but df.mad still returns float.

Output:
2016 6062.5 2017 6250.0 2018 2500.0 2019 0.0 dtype: float64

is there any need of " import numpy as np" command in above program ?
Reply
#5
(Jul-21-2019, 12:57 AM)ift38375 Wrote: is there any need of " import numpy as np" command in above program ?
In this case import numpy as np is redundant. However, Numpy is used frequently when doing some calculations and working with data. So, it is better to include that line in your script. Note, you can get access to numpy using pd.np.
Reply
#6
(Jul-20-2019, 08:48 AM)scidam Wrote: Ability to use NaN values with columns of integer type is latest pandas feature (and still experimental).
As of Pandas 0.24.x you can do this, e.g.

import pandas as pd
import numpy as np
diSales= { 2016:{'qtr1':34500,'qtr2':56000,'qtr3':47000,'qtr4':49000},
           2017:{'qtr1':44900,'qtr2':46100,'qtr3':57000,'qtr4':59000},
           2018:{'qtr1':54500,'qtr2':51000,'qtr3':57000,'qtr4':58500},
           2019:{'qtr1':61000}
         }
df = pd.DataFrame(diSales, dtype=pd.Int32Dtype())
df.mad(axis=0)
df.info() returns integer dtype, but df.mad still returns float.

Output:
2016 6062.5 2017 6250.0 2018 2500.0 2019 0.0 dtype: float64

Still showing dtyle : float64 in output after using your code which have line: df = pd.DataFrame(diSales, dtype=pd.Int32Dtype()).why ? What is use of this line ?
Reply
#7
(Jul-21-2019, 04:28 AM)ift38375 Wrote: df = pd.DataFrame(diSales, dtype=pd.Int32Dtype()).why ? What is use of this line ?
This is about new Pandas feature, see docs here.
if you call df.info(), you find that the data frame is of integer type; Nevertheless, .mad method, along with .mean method, still automatically convert it to a float type. So, the result of .mad execution has <float> type.
Reply
#8
(Jul-21-2019, 11:05 PM)scidam Wrote:
(Jul-21-2019, 04:28 AM)ift38375 Wrote: df = pd.DataFrame(diSales, dtype=pd.Int32Dtype()).why ? What is use of this line ?
This is about new Pandas feature, see docs here.
if you call df.info(), you find that the data frame is of integer type; Nevertheless, .mad method, along with .mean method, still automatically convert it to a float type. So, the result of .mad execution has <float> type.

I think Df.info()is used for getting information about column-wise data type of dataframe but it is not used for convert whole float output into int. am i right ?
Reply
#9
(Jul-22-2019, 12:44 AM)ift38375 Wrote: I think Df.info()is used for getting information about column-wise data type of dataframe but it is not used for convert whole float output into int. am i right ?
Yes, you are right. The .info method is just to get information about a data frame. If call it, you can see that the df created is of integer type, but .mad method still returns float.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  FutureWarning: Logical ops (and, or, xor) between Pandas objects and dtype-less seque NewBiee 5 1,490 Sep-12-2023, 03:15 PM
Last Post: deanhystad
  Pandas replace function not working on datafram with floats bcrypto 1 2,812 Apr-12-2021, 08:59 PM
Last Post: bcrypto
  Data dtype error according to the rule "safe" AndreasMavro 5 9,006 Feb-27-2020, 10:46 PM
Last Post: Pama
  ValueError: Input contains infinity or a value too large for dtype('float64') Rabah_r 1 12,840 Apr-06-2019, 11:08 AM
Last Post: scidam
  numpy dtype anomaly bluefrog 4 3,467 Nov-07-2018, 12:37 AM
Last Post: bluefrog

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020