私は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で失敗します ない フロートに変換可能...