Python Pandas ( сохранение данных )
Появилась такая проблема: есть данные в pandas.DataFrame, как их сохранить в файл, чтобы они не "потеряли вид" как в DataFrame.
Надо, чтобы получилось так, только в Excele
С моим кодом получается так:
from collections import Counter
import pandas as pd
with open('text.txt') as file:
words1 = str(file.read()).split()
words1 = dict(Counter(words1).most_common())
word_dict = {
'Слова': list(words1),
'Количество': list(words1.values())
}
x = pd.DataFrame(word_dict, index=range(len(words1)))
print(x)
with open('info.csv', 'w') as f_csv:
x.to_csv(f_csv)
Ответы (4 шт):
Как я уже написал в комментарии к вашему вопросу, ваш CSV файл (почти) в порядке, только вы его открыли в Excel непригодным способом.
(Вы можете проверить ваш .csv файл тоже например на сайте Online CSV Editor and Viewer.)
Вы делаете это слишком сложно. Здесь упрощенная версия вашей программы с какими-то добавками:
from collections import Counter
import pandas as pd
with open('text.txt') as file:
words1 = file.read().split()
words1 = Counter(words1).most_common()
x = pd.DataFrame(words1, columns=['Слова', 'Количество'])
print(x)
x.to_csv(f_csv, index=True)
Объяснения:
Команду
words1 = str(file.read()).split()
я упростил на
words1 = file.read().split()
т. к. file.read() уже является строкой.
Часть
word_dict = {
'Слова': list(words1),
'Количество': list(words1.values())
}
я просто удалил; вместо word_dict я в конструкторе pd.DataFrame() использовал прямо список парей words1 (т.к. метод .most_common() возвращает список парей (слово, частота)), и имена столбцов 'Слова' и 'Количество' использовал прямо в нем.
Вместо
x = pd.DataFrame(word_dict, index=range(len(words1)))
я использовал
x = pd.DataFrame(words1, columns=['Слова', 'Количество'])
потому что индекс будет стандартно таким, как вы хотели, но я добавил имя столбцов.
Вместо вашего
with open('info.csv', 'w') as f_csv:
x.to_csv(f_csv)
я использовал просто
x.to_csv('info.csv', index=True) # вы хотите сохранить тоже index
Самый постой и быстрый способ сохранять DataFrame - это использовать его родной формат pickle:
yourDataFrame.to_pickle("yourDataFrameFile.pkl") # Save DataFrame to pickle file
yourDataFrame = read_pickle("yourDataFrameFile.pkl") # Load DataFrame from pickle file
Я пользуюсь XlsxWriter.
pip install XlsxWriter
import pandas as pd
# ...
# ...
# ...
writer = pd.ExcelWriter('filename.xlsx', engine='xlsxwriter')
df.to_excel(writer, 'Data', index=False)
writer.close()

