I am getting KeyError: "['CashFinancial'] not in index" on the df.to_csv line because 'GOOG' doesn't have the CashFinancial column. How can I have it write in null for the CashFinancial value for 'GOOG'?
import pandas as pd
from yahooquery import Ticker
symbols = ['AAPL','GOOG','MSFT'] #This will be 75,000 symbols.
header = ["asOfDate","CashAndCashEquivalents","CashFinancial","CurrentAssets","TangibleBookValue","CurrentLiabilities","TotalLiabilitiesNetMinorityInterest"]
for tick in symbols:
faang = Ticker(tick)
faang.balance_sheet(frequency='q')
df = faang.balance_sheet(frequency='q')
df.to_csv('output.csv', mode='a', index=True, header=False, columns=header)
CodePudding user response:
What about :
if tick == "GOOG"
df.loc[:,"CashFinancial"] = None
To set an entire CashFinancial column to "None" only if your "tick" was GOOG, before writing it to csv.
The full code from the example you posted would he something like :
import pandas as pd
from yahooquery import Ticker
symbols = ['AAPL','GOOG','MSFT']
header = ["asOfDate","CashAndCashEquivalents","CashFinancial","CurrentAssets","TangibleBookValue","CurrentLiabilities","TotalLiabilitiesNetMinorityInterest"]
for tick in symbols:
faang = Ticker(tick)
faang.balance_sheet(frequency='q')
df = faang.balance_sheet(frequency='q')#,{"symbol":[1],"asOfDate":[2],"CashAndCashEquivalents":[3],"CashFinancial":[4],"CurrentAssets":[5],"TangibleBookValue":[6],"CurrentLiabilities":[7],"TotalLiabilitiesNetMinorityInterest":[8],"marketCap":[9]}
for column_name in header :
if not column_name in df.columns :
#Here, if any column is missing from the names you defined
#in your "header" variable, we add this column and set all
#it's row values to None
df.loc[:,column_name ] = None
df.to_csv('output.csv', mode='a', index=True, header=False, columns=header)
CodePudding user response:
Load all dataframes into a list, then use pd.concat (it will create NaN in missing columns):
import pandas as pd
from yahooquery import Ticker
symbols = ["AAPL", "GOOG", "MSFT"]
header = [
"asOfDate",
"CashAndCashEquivalents",
"CashFinancial",
"CurrentAssets",
"TangibleBookValue",
"CurrentLiabilities",
"TotalLiabilitiesNetMinorityInterest",
]
all_dfs = []
for tick in symbols:
faang = Ticker(tick)
df = faang.balance_sheet(frequency="q")
all_dfs.append(df)
df = pd.concat(all_dfs)
for symbol, g in df.groupby(level=0):
print(symbol)
print(g[header])
# to save to CSV:
# g[header].to_csv('filename.csv')
print("-" * 80)
Prints:
AAPL
asOfDate CashAndCashEquivalents CashFinancial CurrentAssets TangibleBookValue CurrentLiabilities TotalLiabilitiesNetMinorityInterest
symbol
AAPL 2021-09-30 3.494000e 10 1.730500e 10 1.348360e 11 6.309000e 10 1.254810e 11 2.879120e 11
AAPL 2021-12-31 3.711900e 10 1.799200e 10 1.531540e 11 7.193200e 10 1.475740e 11 3.092590e 11
AAPL 2022-03-31 2.809800e 10 1.429800e 10 1.181800e 11 6.739900e 10 1.275080e 11 2.832630e 11
AAPL 2022-06-30 2.750200e 10 1.285200e 10 1.122920e 11 5.810700e 10 1.298730e 11 2.782020e 11
AAPL 2022-09-30 2.364600e 10 1.854600e 10 1.354050e 11 5.067200e 10 1.539820e 11 3.020830e 11
--------------------------------------------------------------------------------
GOOG
asOfDate CashAndCashEquivalents CashFinancial CurrentAssets TangibleBookValue CurrentLiabilities TotalLiabilitiesNetMinorityInterest
symbol
GOOG 2021-09-30 2.371900e 10 NaN 1.841100e 11 2.203950e 11 6.178200e 10 1.028360e 11
GOOG 2021-12-31 2.094500e 10 NaN 1.881430e 11 2.272620e 11 6.425400e 10 1.076330e 11
GOOG 2022-03-31 2.088600e 10 NaN 1.778530e 11 2.296810e 11 6.194800e 10 1.030920e 11
GOOG 2022-06-30 1.793600e 10 NaN 1.723710e 11 2.300930e 11 6.135400e 10 9.976600e 10
GOOG 2022-09-30 2.198400e 10 NaN 1.661090e 11 2.226000e 11 6.597900e 10 1.046290e 11
--------------------------------------------------------------------------------
MSFT
asOfDate CashAndCashEquivalents CashFinancial CurrentAssets TangibleBookValue CurrentLiabilities TotalLiabilitiesNetMinorityInterest
symbol
MSFT 2021-09-30 1.916500e 10 6.863000e 09 1.743260e 11 9.372900e 10 8.052800e 10 1.834400e 11
MSFT 2021-12-31 2.060400e 10 6.255000e 09 1.741880e 11 1.016270e 11 7.751000e 10 1.803790e 11
MSFT 2022-03-31 1.249800e 10 7.456000e 09 1.539220e 11 8.420500e 10 7.743900e 10 1.816830e 11
MSFT 2022-06-30 1.393100e 10 8.258000e 09 1.696840e 11 8.772000e 10 9.508200e 10 1.982980e 11
MSFT 2022-09-30 2.288400e 10 7.237000e 09 1.608120e 11 9.529900e 10 8.738900e 10 1.862180e 11
--------------------------------------------------------------------------------
