/ / Python df.to_excel()は、数字をテキストとしてExcelに格納します。値として保存する方法 - python、excel、pandas、value

数字をテキストとしてExcelに格納するPythonのdf.to_excel()。値として保存する方法 - python、excel、pandas、value

私はpd.read_htmlを通してグーグルファイナンスからテーブルデータを削り、そして次に見られるようにdf.to_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に移行する際に、テキストではなく実際の値として格納する方法を教えてください。

任意の助けは大歓迎です。ありがとうございます。

回答:

回答№1は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()

回答№2のための5

データフレームを作成または使用するときに文字列データが数値に変換される他の解決策に加えて、データフレームのオプションを使用してそれを行うことも可能です。 xlsxwriter エンジン:

writer = pd.ExcelWriter("output.xlsx",
engine="xlsxwriter",
options={"strings_to_numbers": True})

から ドキュメント

strings_to_numbers:有効にする worksheet.write() 可能であれば、文字列を数値に変換するメソッド float() 「テキストとして保存された数字」に関するExcelの警告を回避するため。


回答№3の場合は1

エクスポートした列が実際にはPythonの数値(intまたはfloat)であることを確認しましたか?

あるいは、= VALUE()関数を使用して、テキストフィールドをExcelで数値に変換することもできます。


回答№4の場合は1

パンダ0.19以降、引数na_valuesをpd.read_htmlに指定することができます。これにより、パンダは自動的にfloat型をあなたのprice列に推測することができます...

これが次のようになります。

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()

あるいは(まだ0.19のパンダを持っていないのなら)、私は@Parfaitのより単純なバージョンの解決策を使うでしょう:

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()

この2番目の解決策は、インデックスカラム(.read_html内)を正しく定義した場合にのみ有効です。(data)カラムの1つに以下のものが含まれていると、ValueErrorで失敗します ない フロートに変換可能...