Python df.to_excel() 在 excel 中将数字存储为文本。如何存储为值?

新手上路,请多包涵

我正在通过 pd.read_html 从 google finance 抓取表格数据,然后通过 df.to_excel() 将该数据保存到 excel — 如下所示:

     dfs = pd.read_html('https://www.google.com/finance?q=NASDAQ%3AGOOGL&fstype=ii&ei=9YBMWIiaLo29e83Rr9AM', flavor='html5lib')
    xlWriter = pd.ExcelWriter(output.xlsx, engine='xlsxwriter')

    for i, df in enumerate(dfs):
        df.to_excel(xlWriter, sheet_name='Sheet{}'.format(i))
    xlWriter.save()

但是,保存到 excel 的数字存储为文本,单元格角上有绿色小三角形。将这些数据移至 excel 时,如何将它们存储为实际值而不是文本?

原文由 gluc7 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

考虑将数字列转换为浮点数,因为 pd.read_html 将 Web 数据读取为字符串类型(即对象)。但在转换为浮点数之前,您需要将连字符替换为 NaN:

 import pandas as pd
import numpy as np

dfs = pd.read_html('https://www.google.com/finance?q=NASDAQ%3AGOOGL' +
                   '&fstype=ii&ei=9YBMWIiaLo29e83Rr9AM', flavor='html5lib')
xlWriter = pd.ExcelWriter('Output.xlsx', engine='xlsxwriter')
workbook = xlWriter.book

for i, df in enumerate(dfs):
    for col in df.columns[1:]:                  # UPDATE ONLY NUMERIC COLS
        df.loc[df[col] == '-', col] = np.nan    # REPLACE HYPHEN WITH NaNs
        df[col] = df[col].astype(float)         # CONVERT TO FLOAT

    df.to_excel(xlWriter, sheet_name='Sheet{}'.format(i))

xlWriter.save()

原文由 Parfait 发布,翻译遵循 CC BY-SA 3.0 许可协议

除了在创建或使用数据框时将字符串数据转换为数字的其他解决方案之外,还可以使用 xlsxwriter 引擎的选项来实现:

 # Versions of Pandas >= 1.3.0:
writer = pd.ExcelWriter('output.xlsx',
                        engine='xlsxwriter',
                        engine_kwargs={'options': {'strings_to_numbers': True}})

# Versions of Pandas < 1.3.0:
writer = pd.ExcelWriter('output.xlsx',
                        engine='xlsxwriter',
                        options={'strings_to_numbers': True})

文档

strings_to_numbers :启用 worksheet.write() 方法将字符串转换为数字,在可能的情况下,使用 float() 将有关Excel存储为文本的警告和数字警告“。

原文由 jmcnamara 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题