熊猫:创建1个函数以读取json,然后创建另一个函数以创建数据框

周杰伦

我想创建一个从API获取数据的函数,然后创建另一个函数来创建和清理相应的数据框以供使用。

第一组def如下所示,并且工作正常:

def get_data():

    print('start download the 1st set')
    confirm_details = requests.get('https://api.data.gov.hk/v2/filter?q=%7B%22resource%22%3A%22http%3A%2F%2Fwww.chp.gov.hk%2Ffiles%2Fmisc%2Fenhanced_sur_covid_19_eng.csv%22%2C%22section%22%3A1%2C%22format%22%3A%22json%22%7D').content
    print('complete download the 1st set')

    print('start download the 2nd set')
    latest_situ = requests.get('https://api.data.gov.hk/v2/filter?q=%7B%22resource%22%3A%22http%3A%2F%2Fwww.chp.gov.hk%2Ffiles%2Fmisc%2Flatest_situation_of_reported_cases_covid_19_eng.csv%22%2C%22section%22%3A1%2C%22format%22%3A%22json%22%7D').content
    print('complete download the 2nd set')

    print('start download the final set')
    residential = requests.get('https://api.data.gov.hk/v2/filter?q=%7B%22resource%22%3A%22http%3A%2F%2Fwww.chp.gov.hk%2Ffiles%2Fmisc%2Fbuilding_list_eng.csv%22%2C%22section%22%3A1%2C%22format%22%3A%22json%22%7D').content
    print('complete download the final set')

get_data()

第二个定义如下,但它说给我抛出一个错误,即“ NameError:未定义名称'confirm_details':

def clean_confirm_df():
    confirm_df = pd.read_json(io.StringIO(confirm_details.decode('utf-8')))
    confirm_df.columns = confirm_df.columns.str.replace(" ", "_" )
    confirm_df.columns = confirm_df.columns.str.replace('/', "_")
    confirm_df.columns = confirm_df.columns.str.replace("*", "")
    confirm_df.columns = confirm_df.columns.str.strip()
    confirm_df['Report_date'] = pd.to_datetime(confirm_df['Report_date'], dayfirst=True)
    confirm_df.rename(columns = {'Confirmed_probable': 'Confirmed'}, inplace = True)
    confirm_df = confirm_df.drop(['Name_of_hospital_admitted', 'Date_of_onset'], axis = 1)
    confirm_df['HK_Non-HK_resident'] = confirm_df['HK_Non-HK_resident'].str.upper()
    confirm_df.head()
    
clean_confirm_df()

我看第一个def,我看到定义了“ confirm_details”。我试过了,分别创建df作品(confirm_df,latest_situ_df和Residential_df)的代码在单独运行时工作正常。

我正在自学python和pandas,感谢任何建议,我应该如何更改代码以使其正常工作。

谢谢。

罗伯·雷蒙德

根据注释-结构代码,以便您了解变量的范围。您已经假设一切都是全球性的,这将是一件非常糟糕的事情……

def get_data():
    ret = {}

    print('start download the 1st set')
    ret["confirm_details"] = requests.get('https://api.data.gov.hk/v2/filter?q=%7B%22resource%22%3A%22http%3A%2F%2Fwww.chp.gov.hk%2Ffiles%2Fmisc%2Fenhanced_sur_covid_19_eng.csv%22%2C%22section%22%3A1%2C%22format%22%3A%22json%22%7D').content
    print('complete download the 1st set')

    print('start download the 2nd set')
    ret["latest_situ"] = requests.get('https://api.data.gov.hk/v2/filter?q=%7B%22resource%22%3A%22http%3A%2F%2Fwww.chp.gov.hk%2Ffiles%2Fmisc%2Flatest_situation_of_reported_cases_covid_19_eng.csv%22%2C%22section%22%3A1%2C%22format%22%3A%22json%22%7D').content
    print('complete download the 2nd set')

    print('start download the final set')
    ret["residential"] = requests.get('https://api.data.gov.hk/v2/filter?q=%7B%22resource%22%3A%22http%3A%2F%2Fwww.chp.gov.hk%2Ffiles%2Fmisc%2Fbuilding_list_eng.csv%22%2C%22section%22%3A1%2C%22format%22%3A%22json%22%7D').content
    print('complete download the final set')

    return ret

def clean_confirm_df(data):
    confirm_df = pd.read_json(io.StringIO(data["confirm_details"].decode('utf-8')))
    confirm_df.columns = confirm_df.columns.str.replace(" ", "_" )
    confirm_df.columns = confirm_df.columns.str.replace('/', "_")
    confirm_df.columns = confirm_df.columns.str.replace("*", "")
    confirm_df.columns = confirm_df.columns.str.strip()
    confirm_df['Report_date'] = pd.to_datetime(confirm_df['Report_date'], dayfirst=True)
    confirm_df.rename(columns = {'Confirmed_probable': 'Confirmed'}, inplace = True)
    confirm_df = confirm_df.drop(['Name_of_hospital_admitted', 'Date_of_onset'], axis = 1)
    confirm_df['HK_Non-HK_resident'] = confirm_df['HK_Non-HK_resident'].str.upper()
    return confirm_df

mydata = get_data()
df = clean_confirm_df(mydata)
print(df.head().to_markdown())
start download the 1st set
complete download the 1st set
start download the 2nd set
complete download the 2nd set
start download the final set
complete download the final set
|    |   Case_no. | Report_date         | Gender   |   Age | Hospitalised_Discharged_Deceased   | HK_Non-HK_resident   | Case_classification   | Confirmed   |
|---:|-----------:|:--------------------|:---------|------:|:-----------------------------------|:---------------------|:----------------------|:------------|
|  0 |          1 | 2020-01-23 00:00:00 | M        |    39 | Discharged                         | NON-HK RESIDENT      | Imported case         | Confirmed   |
|  1 |          2 | 2020-01-23 00:00:00 | M        |    56 | Discharged                         | HK RESIDENT          | Imported case         | Confirmed   |
|  2 |          3 | 2020-01-24 00:00:00 | F        |    62 | Discharged                         | NON-HK RESIDENT      | Imported case         | Confirmed   |
|  3 |          4 | 2020-01-24 00:00:00 | F        |    62 | Discharged                         | NON-HK RESIDENT      | Imported case         | Confirmed   |
|  4 |          5 | 2020-01-24 00:00:00 | M        |    63 | Discharged                         | NON-HK RESIDENT      | Imported case         | Confirmed   |

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建一个函数以将值从一个数据框插入另一个数据框

在另一个函数中创建一个函数以更改状态

创建一个 for 循环或函数以从数据框创建多个热图

创建记录时,运行一个函数以在另一个模块中创建记录-Odoo 13

创建模板函数以根据大小用另一个向量填充向量

如何创建一个函数以供稍后在另一个函数中重用

创建一个函数以基于给定的参数(如列表和熊猫中的特定条件)在数据框中创建新行

创建一个在数据框中进行迭代的函数以搜索最新值,然后将其保存到新的数据框中

创建一个lambda函数以同时迭代集合

在R中创建一个函数以比较行

创建一个jQuery函数以供单击

创建一个函数以每秒返回米数

我将如何在 Python 中创建另一个 int() 函数以便我理解它?

创建一个函数以绘制计数图或基于数据框中列的数据类型绘制直方图

创建一个函数以提取特定的列并重命名熊猫

创建一个函数以根据Pandas数据框和标签中的列执行分组和排序

申请一个函数以使用向量化输入在数据框中创建新列

创建一个函数以从数据框列表中删除具有不同名称的列

创建一个函数以遍历现有数据框并将值添加到新列

从另一个创建函数

创建一个SQL函数以在检查数据时返回一点

创建一个通用函数以将其用于其他数据

在AngularJS中,如何在一个控制器中创建函数以更改另一个控制器中的变量?

RxSwift如何调用1个或多个函数以返回另一个函数

如何基于另一个数据框列为 True 创建函数?

在一个函数中创建一个数组,然后在另一个函数中读取它而没有返回语句

根据熊猫数据框中的另一个列表创建一个列表

创建一个函数以读取两个文本文件并从中绘制图形

创建一个函数以在最后添加一个双向链接列表