Использование Pandas для записи файла создает пустые строки
Я использую библиотеку pandas для записи содержимого базы данных mysql в файл csv.
Но когда я пишу CSV, все остальные строки остаются пустыми:
Кроме того, он печатает номера строк слева, что мне не нужно. Первый столбец должен быть "Номер счета".
Вот мой код:
destination = 'output_file.txt'
read_sql = """ SELECT LinkedAccountId,ProductName,ItemDescription,ResourceId,UnBlendedCost,UnBlendedRate,Name,Owner,Engagement FROM billing_info ;"""
fieldnames = ['Account Number', 'Product Name', 'Item Description', 'Resource ID', 'UnBlended Cost', 'UnBlended Rate', 'Name', 'Owner', 'Engagement']
# Open the file
f = open(destination, 'w')
cursor.execute(read_sql)
while True:
# Read the data
df = pd.DataFrame(cursor.fetchmany(1000))
# We are done if there are no data
if len(df) == 0:
break
# Let's write to the file
else:
df.to_csv(f, header=fieldnames)
Почему между строками с данными печатаются пустые строки? Как я могу заставить его создать файл без пустых строк и без столбца с номером строки слева?
3 ответа
Взгляните на параметры to_csv: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_csv.html
Для удобства я разместил здесь несколько интересных моментов:
line_terminator: строка, необязательно
Символ новой строки или последовательность символов для использования в выходном файле. По умолчанию используется os.linesep, что зависит от ОС, в которой вызывается этот метод ("n" для linux, "rn" для Windows, т.е.).
А также
index: bool, по умолчанию True
Напишите имена строк (индекс).
Вероятно, это то, что вы ищете. Что касается пустых строк, попробуйте явно указать одну новую строку:
df.to_csv(f, header=fieldnames, index=False, line_terminator='\n')
Я пришел сюда только для названия, а не для удаления порядковых номеров. Вот почему для полноты картины я хочу добавить к принятому ответу, что удаление двойных разрывов строк выполняется простоline_terminator='\n'
.
В этом примере это будет
f = open(destination, 'w')
df.to_csv(f, line_terminator='\n')
f.close()
или при использовании «с открытым (..)»
with open(destination, 'w') as f
f.write(df.to_csv(line_terminator='\n'))
Другие параметры, такие как заголовки, могут быть добавлены кdf.to_csv()
по мере необходимости.
Чтобы также написать пробелы междуDataFrame
,
import pandas as pd
import numpy as np
with open('report_.csv', 'w') as f:
for _ in range(4): # loop here
df = pd.DataFrame(np.random.random((3,4)))
df.to_csv(f,
index=True, # to include index
header=True, # to include header
lineterminator='\n', # to remove whitespace between row
)
f.write('\n') # remove this to delete whitespace between DataFrame