Python df.to_excel()将数字作为文本存储在excel中。 如何存储为值?
我通过pd.read_html从谷歌财经刮表数据,然后通过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的数字将作为文本存储在单元格angular落中的绿色小三angular形中。 在将这些数据移到excel中时,我如何将它们存储为实际值而不是文本?
任何帮助表示赞赏。 谢谢!!!
考虑将数字列转换为浮点数,因为pd.read_html
以stringtypes(即对象)的pd.read_html
读取Web数据。 但在转换为浮点数之前,需要将连字符replace为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()
你有没有确认你输出的列是Python中的实数(int还是float)?
或者,您可以使用= VALUE()函数将文本字段转换为Excel中的数字。
由于pandas0.19,你可以提供参数na_values pd.read_html这将允许pandas正确自动推断浮动types为您的价格列…
以下是这样的样子:
dfs = pd.read_html( 'https://www.google.com/finance?q=NASDAQ%3AGOOGL&fstype=ii&ei=9YBMWIiaLo29e83Rr9AM', flavor='html5lib', index_col='\nIn Millions of USD (except for per share items)\n', na_values='-' ) xlWriter = pd.ExcelWriter('Output.xlsx', engine='xlsxwriter') for i, df in enumerate(dfs): df.to_excel(xlWriter, sheet_name='Sheet{}'.format(i)) xlWriter.save()
或者(如果你还没有pandas0.19),我会使用更简单的@ Parfait解决scheme:
dfs = pd.read_html( 'https://www.google.com/finance?q=NASDAQ%3AGOOGL&fstype=ii&ei=9YBMWIiaLo29e83Rr9AM', flavor='html5lib', index_col='\nIn Millions of USD (except for per share items)\n' ) xlWriter = pd.ExcelWriter('Output.xlsx', engine='xlsxwriter') for i, df in enumerate(dfs): df.mask(df == '-').astype(float).to_excel(xlWriter, sheet_name='Sheet{}'.format(i)) xlWriter.save()
这第二个解决scheme只适用于正确定义索引列(在.read_html中),如果其中一个(数据)列包含任何不能转换为浮点数的数据,它将以一个ValueError失败。
除了在创build或使用数据xlsxwriter
时将string数据转换为数字的其他解决scheme之外,还可以使用xlsxwriter
引擎的选项来执行此xlsxwriter
:
writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter', options={'strings_to_numbers': True})
从文档 :
strings_to_numbers
:启用worksheet.write()
方法将string转换为数字,如有可能,使用float()
以避免有关“存储为文本的数字”的Excel警告。