如何使用 Pandas 在单元格中保存 *.xlsx long URL
How to save in *.xlsx long URL in cell using Pandas
例如,我将 excel 文件读取到具有 2 列(id 和 URL)的 DataFrame 中。 URLs in input file are like text(without hyperlinks):
input_f = pd.read_excel("input.xlsx")
观察这个 DataFrame 中的内容 - 一切都已成功读取,所有 URL 在 input_f
中都正常。之后当我不想保存这个文件时 to_excel
input_f.to_excel("output.xlsx", index=False)
我收到了警告。
Path\worksheet.py:836: UserWarning: Ignoring URL 'http:// here long URL' with
link or location/anchor > 255 characters since it exceeds Excel's
limit for URLS force_unicode(url))
并且在 output.xlsx 中长 URL 的单元格是空的,并且 URLs 成为超链接。
如何解决这个问题?
我自己试了一下,也遇到了同样的问题。您可以尝试创建一个临时 csv 文件,然后使用 xlsxwriter 创建一个 excel 文件。完成后删除 tmp 文件。 xlsxwriter 有一个 write_string 方法,它将覆盖 excel 所做的自动超链接。这对我有用。
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)
您可以使用不将字符串转换为 url 的选项创建 ExcelWriter 对象:
writer = pandas.ExcelWriter(r'file.xlsx', engine='xlsxwriter',options={'strings_to_urls': False})
df.to_excel(writer)
writer.close()
来自 the docs 部分:“将 XlsxWriter 构造函数选项传递给 Pandas”,'strings_to_urls': False
现在指定如下:
writer = pd.ExcelWriter('pandas_example.xlsx',
engine='xlsxwriter',
engine_kwargs={'options': {'strings_to_urls': False}})
然后继续按照已接受的回复建议进行 :
df.to_excel(writer)
writer.close()
例如,我将 excel 文件读取到具有 2 列(id 和 URL)的 DataFrame 中。 URLs in input file are like text(without hyperlinks):
input_f = pd.read_excel("input.xlsx")
观察这个 DataFrame 中的内容 - 一切都已成功读取,所有 URL 在 input_f
中都正常。之后当我不想保存这个文件时 to_excel
input_f.to_excel("output.xlsx", index=False)
我收到了警告。
Path\worksheet.py:836: UserWarning: Ignoring URL 'http:// here long URL' with link or location/anchor > 255 characters since it exceeds Excel's limit for URLS force_unicode(url))
并且在 output.xlsx 中长 URL 的单元格是空的,并且 URLs 成为超链接。
如何解决这个问题?
我自己试了一下,也遇到了同样的问题。您可以尝试创建一个临时 csv 文件,然后使用 xlsxwriter 创建一个 excel 文件。完成后删除 tmp 文件。 xlsxwriter 有一个 write_string 方法,它将覆盖 excel 所做的自动超链接。这对我有用。
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)
您可以使用不将字符串转换为 url 的选项创建 ExcelWriter 对象:
writer = pandas.ExcelWriter(r'file.xlsx', engine='xlsxwriter',options={'strings_to_urls': False})
df.to_excel(writer)
writer.close()
来自 the docs 部分:“将 XlsxWriter 构造函数选项传递给 Pandas”,'strings_to_urls': False
现在指定如下:
writer = pd.ExcelWriter('pandas_example.xlsx',
engine='xlsxwriter',
engine_kwargs={'options': {'strings_to_urls': False}})
然后继续按照已接受的回复建议进行
df.to_excel(writer)
writer.close()