Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Using map to convert pandas dataframe to list

I am using map to convert some columns in a dataframe to list of dicts. Here is a MWE illustrating my question.

import pandas as pd

df = pd.DataFrame()
df['Col1'] = [197, 1600, 1200]
  
df['Col2'] = [297, 2600, 2200]
  
df['Col1_a'] = [198, 1599, 1199]

df['Col2_a'] = [296, 2599, 2199]

print(df)

The output is

   Col1  Col2  Col1_a  Col2_a
0   197   297     198     296
1  1600  2600    1599    2599
2  1200  2200    1199    2199

Now say I want to extract only those columns whose name ends with a suffix "_a". One way to do it is the following –

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

list_col = ["Col1","Col2"]
cols_w_suffix = map(lambda x: x + '_a', list_col)

print(df[cols_w_suffix].to_dict('records'))

[{'Col1_a': 198, 'Col2_a': 296}, {'Col1_a': 1599, 'Col2_a': 2599}, {'Col1_a': 1199, 'Col2_a': 2199}]

This is expected answer. However, if I try to print the same expression again, I get an empty dataframe.

print(df[cols_w_suffix].to_dict('records'))

[]

Why does it evaluate to an empty dataframe? I think I am missing something about the behavior of map. Because when I directly pass the column names, the output is still as expected.

df[["Col1_a","Col2_a"]].to_dict('records')

[{'Col1_a': 198, 'Col2_a': 296}, {'Col1_a': 1599, 'Col2_a': 2599}, {'Col1_a': 1199, 'Col2_a': 2199}]

>Solution :

Your map generator is exhausted.

Use cols_w_suffix = list(map(lambda x: x + '_a', list_col)) or a list comprehension cols_w_suffix = [f'{x}_a' for x in list_col].

That said, a better method to select the columns would be:

df.filter(regex='_a$')

Or:

df.loc[:, df.columns.str.endswith('_a')]
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading