【问题标题】:How to save in *.xlsx long URL in cell using Pandas如何使用 Pandas 在单元格中保存 *.xlsx 长 URL
【发布时间】:2016-05-28 04:51:41
【问题描述】:

例如,我用 2 列(id 和 URL)将 excel 文件读入 DataFrame。输入文件中的 URL 类似于文本(没有超链接):

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

观察这个 DataFrame 中的内容 - 一切都已成功读取,input_f 中的所有 URL 都正常。之后当我不想将此文件保存到_excel时

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

我收到警告。

路径\worksheet.py:836: UserWarning: Ignoring URL 'http:// here long URL' with 链接或位置/锚 > 255 个字符,因为它超出了 Excel 的 URL 限制 force_unicode(url))

在 output.xlsx 中,长 URL 的单元格是空的,并且 URL 变成了超链接。

如何解决这个问题?

【问题讨论】:

    标签: python excel pandas xlsxwriter


    【解决方案1】:

    我自己试过了,也遇到了同样的问题。您可以尝试创建一个临时 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)
    

    【讨论】:

      【解决方案2】:

      您可以创建一个 ExcelWriter 对象,并选择不将字符串转换为 url:

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

      【讨论】:

      • 仅供参考,对于其他人来说,xlsxwriter 版本 1.2.3 将最大 url 长度从 255 个字符增加到 2079 个字符,这在最新版本的 Excel 中得到了支持,这可能避免需要 strings_to_urls=False
      • 是否有一个技巧可以绕过文件中最大 URL 数的 excel 限制? :)
      【解决方案3】:

      the docs 部分:“将 XlsxWriter 构造函数选项传递给 Pandas”,'strings_to_urls': False 现在指定如下:

      writer = pd.ExcelWriter('pandas_example.xlsx',
                              engine='xlsxwriter',
                              engine_kwargs={'options': {'strings_to_urls': False}})
      

      然后继续按照接受的回复建议here

      df.to_excel(writer)
      writer.close()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-21
        • 2013-02-22
        • 1970-01-01
        • 2010-09-13
        • 2018-04-15
        • 2012-02-24
        • 1970-01-01
        • 2019-07-19
        相关资源
        最近更新 更多