Pandas对流感数据的清洗

流感数据下载
rug

查看‘2004.csv’,文件前两行和第一列都是需要跳过的,使用pandas的read_csv函数的时候带上参数skiprows和usecols即可解决。而文件尾多了一行不需要的信息,使用nrows参数读取指定个数的行数即可
在这里插入图片描述
在这里插入图片描述
读取‘2004.csv’文件代码:

df = pd.read_csv('2004.csv',
                 encoding='gbk',
                 skiprows=2,
                 usecols=[1,2,3,4,5],
                 nrows=32
                 )

在这里插入图片描述
查看df的内容,发现还有许多东西需要处理:

1.第一行不需要
2.产生了NaN

对于第一个问题使用DataFrame的drop函数,对于第二个问题使用fillna函数即可

df=df.drop(index=0)
df['死亡率']=df['死亡率'].fillna(0)

在这里插入图片描述
现在数据已经清洗成功,还需要加上‘年份’和‘总人口数’
年份可以直接使用索引加

df['年份']=2004

在这里插入图片描述
总人口数需要从人口数据‘people.csv’中读取

Usecols=list(range(0,14))
people=pd.read_csv('people.csv',
                   encoding='gbk',
                   skiprows=3,
                   nrows=31,
                   usecols=Usecols
                  )

将人口数据加入df中,注意加入之前先将index对齐

df.index = df.index - 1
df['总人口数']=people['2004年']

到此,已经完全处理好一个csv文件
在这里插入图片描述

流感数据从2004-2016一共13个csv文件,需要循环读入这13个csv文件
读入13个流感数据部分代码

 for i in range(2004,2017):
        df = pd.read_csv('beforClearn/{}.csv'.format(i),
                         encoding='gbk',
                         skiprows=2,
                         usecols=[1, 2, 3, 4, 5],
                         nrows=32
                         )

最后,将DataFrame写入csv文件中,因为是连续写入,所以在to_csv函数中加上参数mode=‘a’

df.to_csv('afterClearn/result.csv',mode='a',index='False',encoding='gbk')

全部python代码:

import pandas as pd
import openpyxl

Usecols=list(range(0,14))
people=pd.read_csv('beforClearn/people.csv',
                   encoding='gbk',
                   skiprows=3,
                   nrows=31,
                   usecols=Usecols
                  )
people.columns=people.columns.str.replace('年','')

def cleanDate(df,year):
    df = df.drop(index=0)
    df.index = df.index - 1
    df['死亡率']=df['死亡率'].fillna(0)
    df['年份'] = year
    df['总人口数']=people[year]
    if int(year)==2004:
        df.to_csv('afterClearn/result.csv',mode='a',index='False',encoding='gbk')
    else:
        df.to_csv('afterClearn/result.csv', mode='a', index='False', encoding='gbk',header=False)

if __name__ == '__main__':
    df = pd.read_csv('beforClearn/2005.csv',
                     encoding='gbk',
                     skiprows=2,
                     usecols=[1, 2, 3, 4, 5],
                     nrows=32
                     )
    cleanDate(df,str(2005))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值