Подтвердить что ты не робот

Как сохранить в *.xlsx длинный URL-адрес в ячейке с помощью Pandas

Например, я прочитал файл excel в DataFrame с двумя столбцами (id и URL). URL-адреса во входном файле похожи на текст (без гиперссылок):

input_f = pd.read_excel("input.xlsx")

Посмотрите, что внутри этого DataFrame - все было успешно прочитано, все URL-адреса в порядке input_f в input_f. После этого, когда я не сохраню этот файл to_excel

input_f.to_excel("output.xlsx", index=False)

Я получил предупреждение.

Путь\workheet.py: 836: UserWarning: Игнорирование URL 'http://здесь длинный URL' со ссылкой или местоположением/привязкой> 255 символов, так как он превышает предел Excel для URLS force_unicode (url))

И в output.xlsx ячейки с длинным URL-адресом были пустыми, а URL-адреса стали гиперссылками.

Как это исправить?

4b9b3361

Ответ 1

Вы можете создать объект ExcelWriter с возможностью не конвертировать строки в URL-адреса:

writer = pandas.ExcelWriter(r'file.xlsx', engine='xlsxwriter',options={'strings_to_urls': False})
df.to_excel(writer)
writer.close()

Ответ 2

Я попробовал это сам и получил ту же проблему. Вы можете попытаться создать файл temp csv, а затем использовать xlsxwriter для создания файла excel. После этого удалите файл tmp. xlsxwriter имеет метод write_string, который будет переопределять автогипертинг, который превосходит. Это сработало для меня.

import pandas as pd
import csv
import os
from xlsxwriter.workbook import Workbook
inData = "C:/Users/martbar/Desktop/test.xlsx"
tmp = "C:/Users/martbar/Desktop/tmp.csv"
exFile = "C:/Users/martbar/Desktop/output.xlsx"

#read in data
df = pd.read_excel(inData)

#send to csv
df.to_csv(tmp, index=False)

#convert to excel
workbook = Workbook(exFile)
worksheet = workbook.add_worksheet()
with open(tmp, 'r') as f:
    reader = csv.reader(f)
    for r, row in enumerate(reader):
        for c, col in enumerate(row):
            #if you use write instead of write_string you will get the error
            worksheet.write_string(r, c, col) 
workbook.close()

#delete tmp file
os.remove(tmp)