Home > OS >  Saving multiple dataframes to CSV using loop in python
Saving multiple dataframes to CSV using loop in python

Time:09-26

I am trying to save multiple dataframes to csv in a loop using pandas, while keeping the name of the dataframe.

import pandas as pd
 
df1 = pd.DataFrame({'Col1':range(1,5), 'Col2':range(6,10)})
df2 = pd.DataFrame({'Col1':range(1,5), 'Col2':range(11,15)})

frames = [df1,df2]

for data in frames:
    data['New'] = data['Col1'] data['Col2']
    
for data in frames:
    data.to_csv('C:/Users/User/Desktop/{}.csv'.format(data))

This doesn't work, but the outcome I am looking for is for both dataframes to be saved in CSV format, to my desktop.

df1.csv
df2.csv

Thanks.

CodePudding user response:

You just need to set the names of the CSV files; like so:

names = ["df1", "df2"]
for name, data in zip(names, frames):
    data.to_csv('C:/Users/User/Desktop/{}.csv'.format(name))

CodePudding user response:

Hope this help. Note I did not use the format function. But I set up code in the directory I am working on.

import pandas as pd
 
df1 = pd.DataFrame({'Col1':range(1,5), 'Col2':range(6,10)})
df2 = pd.DataFrame({'Col1':range(1,5), 'Col2':range(11,15)})

frames = [df1,df2]

for data in frames:
    data['New'] = data['Col1'] data['Col2']
  
n = 0
for data in frames:
    n = n   1
    data.to_csv('df'   str(n)   ".csv")

CodePudding user response:

In this loop:

for data in frames:
    data.to_csv('C:/Users/User/Desktop/{}.csv'.format(data))

You are looping over a list of DataFrame objects so you cannot use them in a string format.

Instead you could use enumerate() to get the indexes as well as the objects. Then you can use the indexes to format the string.

for idx,data in enumerate(frames):
    data.to_csv('df{}.csv'.format(idx   1)) 
# the reason for adding 1 is to get the numbers to start from 1 instead of 0

Otherwise you can loop through your list just using the index like this:

for i in range(len(frames)):
    frames[i].to_csv('df{}.csv'.format(idx   1)) 
  • Related