Как добавить два объекта dataframe, содержащие одинаковые данные столбца, но разные имена столбцов? - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу добавить расход df к доходу df, но не могу сделать это должным образом. Может кто-нибудь предложить, как мне это сделать?

'' '

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 ]

1 голос
/ 09 апреля 2020

Переименование столбцов.

df = df.rename(columns={'old_name': 'new_name',})

Затем добавьте с помощью merge (), join () или concat ().

0 голосов
/ 11 апреля 2020

Используя конструкцию df = pd.read_ html (url), несколько списков возвращаются при очистке финансовых показателей marketwatch. Приведенная ниже функция возвращает один кадр данных всех элементов баланса. Тот же код применяется к квартальным и годовым доходам и отчетам о расходах ca sh.

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
0 голосов
/ 09 апреля 2020

Мне удалось добавить кадры со следующим кодом. Спасибо Дэвиду, что поставил меня на правильный путь. Я признаю, что это не лучший способ сделать это, потому что в среде выполнения я не знаю значения текста, который нужно переименовать, и я жестко закодировал его здесь. В идеале лучше было бы вместо этого ссылаться на местозаполнитель в df.iloc [: 0,0], но мне тяжело заставить его работать.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...