【问题标题】:CSV data scraping with python使用 python 抓取 CSV 数据
【发布时间】:2020-12-05 07:44:01
【问题描述】:

我正在开发一个基于数据集 (https://github.com/owid/covid-19-data/blob/master/public/data/owid-covid-data.csv) 的项目。 我只对三列感兴趣,“大陆”、“日期”和一个数据列。我想添加来自相同大洲和日期的所有数据,例如按日期排列每个大洲的数据。

这是我当前的代码(到目前为止,我已经创建了字典和一个递归来用每个日期条目数据填充它们):

df=pd.read_csv(r'C:\Users\julio\Desktop\proyect\owid-covid-data.csv')
print(df.iloc[0,1])# continent
print(df.iloc[0,3])# date
print(df.iloc[0,5])# data (new_cases)
Africa=dict()
Europe=dict()
Asia=dict()
NorthAmerica=dict()
SouthAmerica=dict()
Oceania=dict()
for index, row in df.iterrows():
    if row['continent']=='Asia':
        Asia.update({df.iloc[index,3],df.iloc[index,5]})
    if row['continent']=='Africa':
        Africa.update({df.iloc[index,3],df.iloc[index,5]})
    if row['continent']=='Europe':
        Europe.update({df.iloc[index,3],df.iloc[index,5]})
    if row['continent']=='North America':
        NorthAmerica.update({df.iloc[index,3],df.iloc[index,5]})
    if row['continent']=='South America':
        SouthAmerica.update({df.iloc[index,3],df.iloc[index,5]})
    if row['continent']=='Oceania':
        Oceania.update({df.iloc[index,3],df.iloc[index,5]})

我收到一条错误消息,提示字典更新需要超过 2 个项目。

怎么了?

【问题讨论】:

    标签: python pandas csv dictionary


    【解决方案1】:

    首先,添加每个大陆和日期的数据。

    df.groupby(['continent', 'date'])['data'].sum().reset_index()

    然后,按大洲和日期升序对数据进行排序

    df.sort_values(['continent', 'date'], ascending=True)

    【讨论】:

      【解决方案2】:

      Rajesh C 的回答可以很好地生成您想要的数据集。

      特定于错误消息,如果我理解您正在尝试正确执行的操作,它是

      Asia.update({df.iloc[index,3]:df.iloc[index,5]})
      

      其他大洲也类似。

      这里有一些例子可以帮助你理解dict.updatehttps://www.programiz.com/python-programming/methods/dictionary/update的语法

      【讨论】:

        【解决方案3】:

        我不确定我是否理解创建字典和 iterrows 循环背后的逻辑。但是这里有一种方法可以下载原帖中的三栏。

        import pandas as pd
        filename = ('https://raw.githubusercontent.com'
                    '/owid/covid-19-data/master/public/data/owid-covid-data.csv')
        fields = ['continent', 'date', 'new_cases']
        df_raw = pd.read_csv(filename, usecols=fields, parse_dates=['date'])
        

        现在,重新整形以将日期转换为行标签,将大洲转换为列标签:

        df = df_raw.pivot_table(index='date',
                                columns='continent',
                                values='new_cases',
                                aggfunc='sum',
                                fill_value=0,
                               )
        print(df.tail())
        
        continent   Africa   Asia  Europe  North America  Oceania  South America
        date                                                                    
        2020-08-11    8828  81397   23272          60213      331          46289
        2020-08-12    7895  88186   19821          59165      402          85542
        2020-08-13    9529  94335   26994          67675      493          89787
        2020-08-14   10515  92004   25367          64727      285          93364
        2020-08-15   12689  95916   18686          76850      434          84099
        

        【讨论】:

          猜你喜欢
          • 2022-01-24
          • 2019-03-06
          • 1970-01-01
          • 2012-03-22
          • 1970-01-01
          • 2017-02-10
          • 1970-01-01
          • 2013-05-23
          • 1970-01-01
          相关资源
          最近更新 更多