#python #pandas #csv
#python #pandas #csv
Вопрос:
У меня есть следующий код для создания csv-файлов из таблиц из файла docx:
from docx import Document
import pandas as pd
document = Document('my_docx.docx')
for index,table in enumerate(document.tables):
df = [['' for i in range(len(table.columns))] for j in range(len(table.rows))]
for i, row in enumerate(table.rows):
for j, cell in enumerate(row.cells):
df[i][j] = cell.text
name = "tables/table_" str(index) ".csv"
pd.DataFrame(df).to_csv(name, index=False, header=True)
Однако Pandas создает нежелательную пустую строку чуть ниже заголовка таблицы. Это происходит только тогда header=True
, когда header=False
эта проблема не возникает. Но мне нужен заголовок.
Я полагаю, что есть два способа решить эту проблему. Создайте файл csv с header=True
помощью, а затем удалите строку или используйте header=False
, а затем добавьте строку в качестве заголовка. Как я могу сделать одно из этих действий?
Комментарии:
1. что вы получаете, когда печатаете
df.columns
непосредственно перед экспортом?2. Печать показывает
df.iloc[0]
иdf.columns
когдаheaders=True
3. @teepee Я получаю эту ошибку: AttributeError: объект ‘list’ не имеет атрибута ‘columns’
4. извините, я имею
pd.DataFrame(df).columns
в виду, что показывает?5. @RaghavGupta Я получаю аналогичную ошибку: AttributeError: объект ‘list’ не имеет атрибута ‘iloc’
Ответ №1:
Используйте df.drop(0, inplace=True)
или df=df.iloc[1:]
для удаления первой строки фрейма данных.
Таким образом, общий код будет :-
from docx import Document
import pandas as pd
document = Document('my_docx.docx')
for index,table in enumerate(document.tables):
df = [['' for i in range(len(table.columns))] for j in range(len(table.rows))]
for i, row in enumerate(table.rows):
for j, cell in enumerate(row.cells):
df[i][j] = cell.text
name = "tables/table_" str(index) ".csv"
dataFrame=pd.DataFrame(df)
dataFrame.drop(0, inplace=True) # Or use dataFrame=dataFrame.iloc[1:]
dataFrame.to_csv(name, index=False, header=True)