简体   繁体   中英

List comprehension to iterate through dataframe

I have written code to encode one row of a dataframe to json, as follows:

def encode_df_metadata_row(df):
    return {'name': df['Title'].values[0], 'code': df['Code'].values[0], 'frequency': df['Frequency'].values[0], 'description': df['Subtitle'].values[0], 'source': df['Source'].values[0]}

Now I would like to encode an entire dataframe to json with some transformation, so I wrote this function:

def encode_metadata_list(df_metadata):
    return [encode_df_metadata_row(df_row) for index, df_row in df_metadata.iterrows()]

I then try to call the function using this code:

df_oodler_metadata = pd.read_csv('DATA\oodler-datasets-metadata.csv')
response = encode_metadata_list(df_oodler_metadata)
print(response)

When I run this code, I get the following error:

AttributeError: 'str' object has no attribute 'values'

I've tried a bunch of variations but I keep getting similar errors. Does someone know the right way to do this?

DataFrame.iterrows yields pairs of index and row , where each row is a Series object. It stores a single element for each column, so the .values[0] part in your encode_df_metadata_row(df) function becomes irrelevant - the correct form of this function should be:

def encode_df_metadata_row(row):
    return {'name': row['Title'], 'code': row['Code'], 'frequency': row['Frequency'], 'description': row['Subtitle'], 'source': row['Source']}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM