Я пытаюсь сохранить несколько фреймов данных в CSV в цикле, используя pandas, сохраняя имя фрейма данных.

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))

Это не работает, но результат, который я ищу, - сохранить оба фрейма данных в формате CSV на моем рабочем столе.

df1.csv
df2.csv

Спасибо.

0
Jack 25 Сен 2021 в 23:54

2 ответа

Надеюсь на эту помощь. Обратите внимание, что я не использовал функцию форматирования. Но я установил код в каталоге, над которым работаю.

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")

0
TroyMcClure8998 25 Сен 2021 в 21:03

В этом цикле:

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

Вы просматриваете список объектов DataFrame, поэтому вы не можете использовать их в строковом формате.

Вместо этого вы можете использовать enumerate () для получения индексов, а также объектов. Затем вы можете использовать индексы для форматирования строки.

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

В противном случае вы можете просмотреть свой список, просто используя такой индекс:

for i in range(len(frames)):
    frames[i].to_csv('df{}.csv'.format(idx + 1)) 
0
D.Manasreh 25 Сен 2021 в 21:17