【问题标题】:Export Pandas data frame with text column containg utf-8 text and URLs to Excel导出带有文本列的 Pandas 数据框包含 utf-8 文本和 Excel 的 URL
【发布时间】:2016-02-25 19:22:02
【问题描述】:

我的 Pandas 数据框包含推文和每条推文的元数据(300.000 行)。我的一些同事需要在 Excel 中处理这些数据,这就是我需要将其导出的原因。

我想使用 Pandas 提供的 .to_csv.to_excel,但我无法使其正常工作。

当我使用.to_csv 时,我的问题是它在数据框的文本部分一直失败。我玩过不同的分隔符,但文件永远不会 100% 对齐。文本列似乎包含制表符、管道字符等,这使 Excel 感到困惑。

df.to_csv('test.csv', sep='\t', encoding='utf-8')

当我尝试将.to_excelxlsxwriter 引擎一起使用时,我遇到了一个不同的问题,即我的文本列包含许多URL(我认为)。 xlswriter 尝试创建这些 URL 的特殊可点击链接,而不是仅仅将它们作为字符串处理。我找到了一些有关如何规避此问题的信息,但我还是无法让它发挥作用。

应该使用以下代码来禁用我认为引起问题的功能:

workbook = xlsxwriter.Workbook(filename, {'strings_to_urls': False})

但是,在使用 to_excel 时,我似乎无法在将数据框加载到 Excel 文件之前调整 Workbook 对象的此设置。

简而言之,如何将包含大量不同文本的列从 Pandas 数据框中导出到 Excel 可以理解的内容?

编辑: 示例:

@geertwilderspvv @telegraaf ach Wilders toch, nep-voorzitter van een nep-partij met maar één lid, \nzeur niet over nep-premier of parlement!

所以在这种情况下,我的数据显然是一个线闸。我会试着找到更多的例子。

edit2:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><logFileName>error047600_01.xml</logFileName><summary>Er zijn fouten aangetroffen in bestand C:\Users\Guy Mahieu\Desktop\Vu ipython notebook\pandas_simple.xlsx</summary><removedRecords summary="Hier volgt een lijst van verwijderde records:"><removedRecord>Verwijderde records: Formule van het onderdeel /xl/worksheets/sheet1.xml</removedRecord></removedRecords></recoveryLog>

荷兰语翻译:

在“文件”中发现错误。以下是已删除记录的列表:已删除记录:部分公式/xl/worksheets/sheet1.xml

【问题讨论】:

  • 你能给我们一个不起作用的df样本吗?
  • @JamesTobin 我已经添加了一个示例,如果需要我会添加更多。

标签: python excel pandas export-to-excel export-to-csv


【解决方案1】:

我认为目前无法通过 Pandas API 传递 XlsxWriter 构造函数选项,但您可以解决strings_to_url 问题,如下所示:

import pandas as pd

df = pd.DataFrame({'Data': ['http://python.org']})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_simple.xlsx', engine='xlsxwriter')

# Don't convert url-like strings to urls.
writer.book.strings_to_urls = False

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')

# Close the Pandas Excel writer and output the Excel file.
writer.save()

更新:在最新版本的 Pandas 中,您可以将 XlsxWriter 构造函数选项直接传递给ExcelWriter(),而无需间接设置writer.book.strings_to_urls

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

【讨论】:

  • 代码有效,这是一个很好的开始。当我打开 Excel 文件时,我收到一条警告说它需要恢复。我已将日志文件放在我的帖子中以便更好地格式化。
  • 打开我的示例创建的文件时收到警告?
  • 是的,我就是这个意思。
  • 我在打开文件时没有看到任何警告,而且确实没有任何理由应该有这样一个简单的测试用例。此外,关于您在上面添加的警告,/xl/worksheets/sheet1.xml 中没有任何“公式”部分。您是否在示例中的数据框中添加了公式或其他数据?
  • 也许数据框中有一些数据被解释为公式。尝试在与其他选项相同的位置添加以下内容,看看是否有所不同:writer.book.strings_to_formulas= False.
【解决方案2】:
 writer = pd.ExcelWriter(report_file, engine='xlsxwriter', options={'strings_to_urls': False,
                                                                       'strings_to_formulas': False})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 2018-08-04
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2021-05-15
    相关资源
    最近更新 更多