Home > Blockchain >  How to order dataframe columns based on dtype?
How to order dataframe columns based on dtype?

Time:07-23

I have a pandas DataFrame with a mixture of float64 and objects. I'd like to reorder the columns, so that all ints are at the start, and then all floats are at the end. Is there an easy way to do this?

Dataframe columns (currently):

Age Sex Weight BMI Job

Desired:

Age BMI Weight Sex Job 

(Age, BMI, Weight are all Int64, Sex, Job are objects)

My actual code has >100 similar features that I'd like to order this way

CodePudding user response:

Let's assume this example:

df = pd.DataFrame({'Age': [20],  'Sex': ['F'], 'Weight': [123],
                   'BMI': [12.3], 'Job': ['ABC']})
df.dtypes

Age         int64
Sex        object
Weight      int64
BMI       float64
Job        object
dtype: object

Interestingly the output of dtypes is a Series, so you can sort it and use the index to reindex your DataFrame:

out = df[df.dtypes.sort_values().index]

output:

   Age  Weight   BMI Sex  Job
0   20     123  12.3   F  ABC

For a custom order:

order = {np.dtype('int64'): 0,
         np.dtype('object'): 1,
         np.dtype('float64'): 2}

df[df.dtypes.map(order).sort_values().index]

output:

   Age  Weight Sex  Job   BMI
0   20     123   F  ABC  12.3
  • Related