In [37]: blue = pd.DataFrame({'A': ['foo','foo','foo','bar','bar'], 'B': [4.0, 4.0, 5.0, 8.0, 8.0]})
In [38]: blue
Out[38]:
A B
0 foo 4
1 foo 4
2 foo 5
3 bar 8
4 bar 8
In [39]: red = pd.DataFrame({'A': ['foo','foo','foo','bar','bar'], 'B': [np.nan, np.nan, np.nan, np.nan, np.nan]})
In [40]: red
Out[40]:
A B
0 foo NaN
1 foo NaN
2 foo NaN
3 bar NaN
4 bar NaN
In [41]: for df in [blue, red]:
....: df.to_csv(str(df))
....:
In [42]: !ls
A B?0 foo 4?1 foo 4?2 foo 5?3 bar 8?4 bar 8 A B?0 foo NaN?1 foo NaN?2 foo NaN?3 bar NaN?4 bar NaN postinstall.sh vagrant
I have some DataFrames. I loop over each DataFrame to work on them. At the end of the loop I want to save each DataFrame as a .csv file named after the DataFrame. I know that it's generally difficult to stringify the name of a variable in Python, but I have to think that I'm missing something obvious here. There is no "name" attribute for DataFrames, so what do I do?
Exporting the DataFrame into a CSV filePandas DataFrame to_csv() function exports the DataFrame to CSV format. If a file argument is provided, the output will be the CSV file. Otherwise, the return value is a CSV format like string. sep: Specify a custom delimiter for the CSV output, the default is a comma.
The Pandas to_csv() function is used to convert the DataFrame into CSV data. To write the CSV data into a file, we can simply pass a file object to the function. Otherwise, the CSV data is returned in a string format.
CSV: Import the csv module in Python, create a csv writer object, and write the list of lists to the file in using the writerows() method on the writer object. What is this? Pandas: Import the pandas library, create a Pandas DataFrame, and write the DataFrame to a file using the DataFrame method DataFrame.
You can just add an attribute to the df, same as any other python object that has a __dict__
attribute and use it later:
In [2]:
blue.name = 'blue'
red.name = 'red'
df_list = [blue, red]
for df in df_list:
print(df.name)
df.to_csv(df.name + '.csv')
blue
red
Even better, for convenience you can store the csv name and use it later too:
In [5]:
blue.name = 'blue'
blue.csv_path = 'blue.csv'
red.name = 'red'
red.csv_path = 'red.csv'
df_list = [blue, red]
for df in df_list:
print(df.name)
print(df.csv_path)
df.to_csv(df.csv_path)
blue
blue.csv
red
red.csv
EDIT As @Jeff has pointed out, the attributes will not persist across most operations on the df as a copy of the df is returned and these attributes are not copied across so be aware of this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With