需求:
1. 加载数据
df = pd.read_csv('./data/usa_election.txt')
2. 对新数据进行总览,查看是否存在缺失数据:
方法一:isnull、notnull、any、all
方法二:df.info()
df.info()
3. 用统计学指标快速描述数值型属性的概要:
df.describe() #统计学指标:数值型属性
4. 空值处理。可能因为忘记填写或者保密等原因,相关字段出现了空值,将其填充为NOT PROVIDE
df.fillna(value='NOT PROVIDE',inplace=True) #空值填充为NOT PROVIDE
df.info() #检查数据表中是否含有空值
5.异常值处理:将捐赠金额小于等于0的数据删除
df['contb_receipt_amt'] <= 0 #得到布尔值(小于0的为True),以此为行索引
df.loc[df['contb_receipt_amt'] <= 0] #得到所有含有异常值的行数据
drop_indexs = df.loc[df['contb_receipt_amt'] <= 0].index #得到含有异常值的行数据的行索引
df.drop(labels=drop_indexs,axis=0,inplace=True) #删除这些行
6. 新建一列,这一列为 候选人所在的党派party
(1)先从网上查询:找到这些候选人各自的党派,然后封装成一个字典
(2)然后利用映射,将党派关系表映射到源数据表中。
df['cand_nm'].map(parties) #给候选者的名字映射党派
df['party'] = df['cand_nm'].map(parties) #将映射后的党派加到原表party这一列
7. 查看party这一列中有哪些不同的元素——去重
.unique() 去重,看Series中有几个不同的元素
df['party'].unique()
8. 统计party中不同元素出现的次数
.value_counts() 计算Series中每一种元素出现的次数
df['party'].value_counts()
9. 查看各个党派收到政治献金总数contb_receipt_amt
需要根据党派分组,然后求各自政治献金的总数
df.groupby(by='party')['contb_receipt_amt'].sum()
10. 查看具体 每天 各个党派 收到的政治献金总数contb_receipt_amt
分组:日期、党派
df.groupby(by={'party','contb_receipt_dt'])['contb_receipt_amt'].sum()
11. 将表中日期格式转化位:’yyyy-mm-dd‘
(1) 为了方便操作,先定义一个字典
(2) map()的运算方法:
def transformDate(s):
day,month,year = s.split('-')
# month是英文缩写,需要转化成数字,用提前准备好的字典 months
month = months[month]
return '20'+year+'-'+str(month)+'-'+day
df['contb_receipt_amt'] = df['contb_receipt_dt'].map(transformDate) #对日期列进行transformDate转换
(3)转化完成。
12. 查看老兵(捐献者职业)DISABLED VETERAN支持谁? 职业中的某一类,给谁捐钱多就支持谁。
df['contbr_occupation']=='DISABLED VETERAN' #返回的是布尔值,True为老兵
df.loc[df['contbr_occupation']=='DISABLED VETERAN'] #老兵所在行数据
#分组:根据候选人分组,再对捐赠金额求和
df.loc[df['contbr_occupation']=='DISABLED VETERAN'].groupby(by='cand_nm') #老兵候选人分类
df[df['contbr_occupation']==DISABLED VETERAN].groupby(by='cand_nm')['contb_receipt_amt'].sum() #老兵给每种党派捐赠献金的总数