2016-02-16 3 views
11

Zum Beispiel lese ich Excel-Datei in DataFrame mit 2 Spalten (ID und URL). URLs in Eingabedatei sind wie Text (ohne Hyperlinks):So speichern Sie in * .xlsx lange URL in Zelle mit Pandas

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

beobachten, was in diesem Datenrahmen - alles erfolgreich gelesen wurde, werden alle URLs in input_f ok sind. Danach, wenn ich diese Datei speichern möchte, um

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

Ich wurde gewarnt.

Pfad \ worksheet.py: 836: UserWarning Ignoriert URL 'http: // hier lange URL' mit Link oder Standort/anchor> 255 Zeichen, da es Grenze für URLS force_unicode Excel überschreitet (url))

Und in output.xlsx Zellen mit langen URL waren leer, und URLs werden Hyperlinks.

Wie behebt man das?

Antwort

19

Sie können ein ExcelWriter Objekt mit der Option Erstellen Sie keine Strings Urls zu konvertieren:

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

Ich habe es selbst versucht und habe das gleiche Problem. Sie könnten versuchen, eine temporäre CSV-Datei zu erstellen und dann xlsxwriter verwenden, um eine Excel-Datei zu erstellen. Wenn Sie fertig sind, löschen Sie die tmp-Datei. xlsxwriter verfügt über eine write_string-Methode, die das automatische Hyperlinking von Excel außer Kraft setzt. Das hat für mich funktioniert.

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