簡體   English   中英

如何從不同的 python 文件導入各種數據幀?

[英]How do I import various Data Frames from different python file?

我有一個名為“clean_data.py”的 python 文件,其中包含我需要的所有數據幀,我想將它們導入另一個名為“main.py”的 python 文件以用於創建儀表板。

是否可以在我的 clean_data.py 中創建 class,如果可以,有人可以指導我閱讀一篇文章(到目前為止我很難找到)以便我弄清楚嗎?

目的是從 CSV 轉移到 API 加班,所以我想將數據方面的事情保留在不同的文件中,而 web 應用程序文件組件在主文件中。

任何幫助將非常感激。

clean_data.py 中的代碼是:

import pandas as pd
import csv
import os # To access my file directory

print(os.getcwd()) # Let's me know the Current Work Directory

fdi_data = pd.read_csv(r'Data/fdi_data.csv')
fdi_meta = pd.read_csv(r'Data/fdi_metadata.csv')

debt_data = pd.read_csv(r'Data/debt_data.csv')
debt_meta = pd.read_csv(r'Data/debt_metadata.csv')

gdp_percap_data = pd.read_csv(r'Data/gdp_percap_data.csv', header=2)
gdp_percap_meta = pd.read_csv(r'Data/gdp_percap_metadata.csv')

gov_exp_data = pd.read_csv(r'Data/gov_exp_data.csv', header=2)
gov_exp_meta = pd.read_csv(r'Data/gov_exp_metadata.csv')

pop_data = pd.read_csv(r'Data/pop_data.csv', header=2)
pop_meta = pd.read_csv(r'Data/pop_metadata.csv')


"""
'wb' stands for World Bank
"""
def wb_merge_data(data, metadata):
    merge = pd.merge(
        data,
        metadata,
        on = 'Country Code',
        how = 'inner'
    )
    return merge 


fdi_merge = wb_merge_data(fdi_data, fdi_meta) 
debt_merge = wb_merge_data(debt_data, debt_meta)
gdp_percap_merge = wb_merge_data(gdp_percap_data, gdp_percap_meta)
gov_exp_merge = wb_merge_data(gov_exp_data, gov_exp_meta)
pop_merge = wb_merge_data(pop_data, pop_meta)


def wb_drop_data(data):
    drop = data.drop(['Country Code','Indicator Name','Indicator Code','TableName','SpecialNotes','Unnamed: 5'], axis=1)
    return drop


fdi_merge = wb_drop_data(fdi_merge)
debt_merge = wb_drop_data(debt_merge)
gdp_percap_merge = wb_drop_data(gdp_percap_merge)
gov_exp_merge = wb_drop_data(gov_exp_merge)
pop_merge = wb_drop_data(pop_merge)


def wb_mr_data(data, value_name):
    data = data.melt(['Country Name','Region','IncomeGroup']).reset_index()
    data = data.rename(columns={'variable': 'Year', 'value': value_name})
    data = data.drop('index', axis = 1)
    return data


fdi_merge = wb_mr_data(fdi_merge, 'FDI')
debt_merge = wb_mr_data(debt_merge, 'Debt')
gdp_percap_merge = wb_mr_data(gdp_percap_merge, 'GDP per Cap') 
gov_exp_merge = wb_mr_data(gov_exp_merge, 'Gov Expend.')
pop_merge = wb_mr_data(pop_merge, 'Population')


def avg_groupby(data, col_cal, cn=False, ig=False, rg=False):
    if cn == True:
        return data.groupby('Country Name')[col_cal].mean().reset_index()
    elif ig == True:
        return data.groupby('IncomeGroup')[col_cal].mean().reset_index()
    elif rg == True:
        return data.groupby('Region')[col_cal].mean().reset_index()

"""
avg_cn_... For country
avg_ig_... Income Group
avg_rg_... Region
"""
avg_cn_fdi = avg_groupby(fdi_merge, 'FDI', cn=True)
avg_ig_fdi = avg_groupby(fdi_merge, 'FDI', ig=True)
avg_rg_fdi = avg_groupby(fdi_merge, 'FDI', rg=True)

avg_cn_debt = avg_groupby(debt_merge, 'Debt', cn=True)
avg_ig_debt = avg_groupby(debt_merge, 'Debt', ig=True)
avg_rg_debt = avg_groupby(debt_merge, 'Debt', rg=True)

avg_cn_gdp_percap = avg_groupby(gdp_percap_merge, 'GDP per Cap', cn=True)
avg_ig_gdp_percap = avg_groupby(gdp_percap_merge, 'GDP per Cap', ig=True)
avg_rg_gdp_percap = avg_groupby(gdp_percap_merge, 'GDP per Cap', rg=True)

avg_cn_gexp = avg_groupby(gov_exp_merge, 'Gov Expend.', cn=True)
avg_ig_gexp = avg_groupby(gov_exp_merge, 'Gov Expend.', ig=True)
avg_rg_gexp = avg_groupby(gov_exp_merge, 'Gov Expend.', rg=True)

avg_cn_pop = avg_groupby(pop_merge, 'Population', cn=True)
avg_ig_pop = avg_groupby(pop_merge, 'Population', ig=True)
avg_rg_pop = avg_groupby(pop_merge, 'Population', rg=True)

在 Python 中,每個文件都是一個模塊。 所以如果你想重用你的代碼,你可以簡單地導入這個module 例如,

# main.py
import clean_data

print(clean_data.avg_cn_fdi)

也許您不需要為此創建 class

您可以像導入任何其他本地創建的文件一樣導入整個 python 文件,並可以訪問其中的 DataFrame。 這是一個例子:

我創建了一個名為temporary.py的文件:

import pandas as pd

data = pd.read_csv("temp.csv")

然后在一個單獨的文件中,我可以像這樣使用data

import temporary

print(temporary.data)

或者,您也可以這樣做:

from temporary import data

print(data)

盡管如此,我認為這不是處理數據的最佳方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM