Je veux apporter une dépense DF à un revenu df mais ne peut pas le faire correctement. Quelqu'un peut-il offrir comment je peux faire cela?
'' ' P>
import pandas as pd import lxml from lxml import html import requests import numpy as np symbol = 'MFC' url = 'https://www.marketwatch.com/investing/stock/'+ symbol +'/financials' df=pd.read_html(url) revenue = pd.concat(df[0:1]) # the revenue dataframe obj revenue = revenue.dropna(axis='columns') # drop naN column header = revenue.iloc[:0] # revenue df header row expense = pd.concat(df[1:2]) # the expense dataframe obj expense = expense.dropna(axis='columns') # drop naN column statement = revenue.append(expense) #results in a dataframe with an added column (Unnamed:0) revenue = pd.concat(df[0:1]) = Fiscal year is January-December. All values CAD millions. 2015 2016 2017 2018 2019 expense = pd.concat(df[1:2]) = Unnamed: 0 2015 2016 2017 2018 2019 '''
3 Réponses :
Renommez des colonnes.
df = df.rename(columns={'old_name': 'new_name',})
N'utilisez pas de tuple pour les colonnes.
Dave Expense = Expense.Rename (Colonnes = ('Sans nom: 0': 'LineItem')) Résultats de la syntaxe
{'Sans nom: 0': 'LineItem'} non ('Sans nom: 0': 'LineItem')
J'ai réussi à ajouter les DataFrames avec le code suivant. Merci David pour me mettre sur la bonne voie. J'admets que ce n'est pas la meilleure façon de le faire car dans un environnement de temps d'exécution, je ne connais pas la valeur du texte à renommer et que j'ai mal codé ici. Idéalement, il serait préférable de faire référence à un espace réservé à DF.ILOC [: 0,0] au lieu de cela, mais je passe une période difficile à faire fonctionner.
df=pd.read_html(url)
revenue = pd.concat(df[0:1])
revenue = revenue.dropna(axis='columns')
revenue.rename({'Fiscal year is January-December. All values CAD millions.':'LineItem'},axis=1,inplace=True)
header = revenue.iloc[:0]
expense = pd.concat(df[1:2])
expense = expense.dropna(axis='columns')
expense.rename({'Unnamed: 0':'LineItem'}, axis=1, inplace=True)
statement = revenue.append(expense,ignore_index=True)
Utilisation de la construction DF = PD.READAD_HTML (URL), plusieurs listes sont renvoyées lors de la grattant des fonds financiers de marché. La fonction ci-dessous renvoie un seul Dataframe de tous les éléments de bilan. Le même code s'applique aux déclarations trimestrielles et annuelles du revenu et des flux de trésorerie.
def getBalanceSheet(url):
df=pd.read_html(url)
count = sum([1 for Listitem in df if 'Unnamed: 0' in Listitem])
statement = pd.concat(df[0:1])
statement = statement.dropna(axis='columns')
if 'q' in url: #quarterly
statement.rename({'All values CAD millions.':'LineItem'},axis=1,inplace=True)
else:
statement.rename({'Fiscal year is January-December. All values CAD millions.':'LineItem'},axis=1,inplace=True)
for rowidx in range(count):
df_name = 'df_'+str(int(rowidx))
df_name = pd.concat(df[rowidx+1:rowidx+2])
df_name = df_name.dropna(axis='columns')
df_name.rename({'Unnamed: 0':'LineItem'}, axis=1, inplace=True)
statement = statement.append(df_name,ignore_index=True)
return statement