Python 如何附加包含相同列数据但不同列名的两个dataframe对象?

Python 如何附加包含相同列数据但不同列名的两个dataframe对象?,python,pandas,dataframe,Python,Pandas,Dataframe,我想将费用df附加到收入df,但无法正确执行。谁能告诉我怎么做 ''' 如何将expense数据框附加到revenue数据框,以便只剩下一个dataframe对象 谢谢,重命名列 df = df.rename(columns={'old_name': 'new_name',}) 然后用merge()、join()或concat()追加数据帧。我设法用以下代码追加数据帧。谢谢大卫让我走上正轨。我承认这不是最好的方法,因为在运行时环境中,我不知道要重命名的文本的值,我在这里硬编码了它。理想情况下,

我想将费用df附加到收入df,但无法正确执行。谁能告诉我怎么做

'''

如何将expense数据框附加到revenue数据框,以便只剩下一个dataframe对象

谢谢,

重命名列

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

然后用merge()、join()或concat()追加数据帧。

我设法用以下代码追加数据帧。谢谢大卫让我走上正轨。我承认这不是最好的方法,因为在运行时环境中,我不知道要重命名的文本的值,我在这里硬编码了它。理想情况下,最好在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)
使用df=pd.read_html(url)构造,在抓取marketwatch financials时会返回几个列表。下面的函数返回所有资产负债表元素的单个数据帧。同样的代码适用于季度和年度收入和现金流量表

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

不要对列使用元组。Dave expense=expense。重命名(列=('Unnamed:0':'LineItem'))会导致语法错误{'Unnamed:0':'LineItem'}not('Unnamed:0':'LineItem'))
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