import pandas as pd
"""
需求
1.加载数据
2.查看数据的基本信息
3.指定数据截取,将如下字段的数据进行提取,其他数据舍弃
cand_nm: 候选人姓名
contbr_nm : 捐赠人姓名
contbr_st:捐赠人所在州
contbr_employer : 捐赠人所在公司
contbr_occupation : 捐赠人职业
contb_receipt_amt : 捐赠数额 (美元
contb_receipt_dt : 捐款的日期对新数据进行总览,查看是否存在缺失数据
4.用统计学指标快速描述数值型属性的概要空值处理。
5.可能因为忘记填写或者保密等等原因,相关字段出现了空值,将其填充为NOT PROVIDE异常值处理。
6.将捐款金额<=0的数据删除
7.新建一列为各个候选人所在党派party
8.查看party这一列中有哪些不同的元素
9.统计party列中各个元素出现次数
10.查看各个党派收到的政治献金总数contb receipt amt
11.查看具体每天各个党派收到的政治献金总数contb_receipt_amt
12.将表中日期格式转换为'yyyy-mm-dd。
13.查看老兵(捐献者职业)DISABLED VETERAN主要支持谁
"""
# 1.加载数据
df = pd.read_csv("./usa_selection.txt")
# 2.查看数据的基本信息
print(df.info())
# 3.指定数据截取,将如下字段的数据进行提取,其他数据舍弃
df = df[["cand_nm", "contbr_nm", "contbr_st",
"contbr_employer", "contbr_occupation", "contb_receipt_amt", "contb_receipt_dt"]]
print(df.head())
# 4.用统计学指标快速描述数值型属性的概要空值处理。
print(df.describe())
# 5.可能因为忘记填写或者保密等等原因,相关字段出现了空值,将其填充为NOT PROVIDE异常值处理。
df.fillna(value="NOT PROVIDE", inplace=True)
print(df.info())
# 6.将捐款金额<=0的数据删除
index_0 = df.loc[df["contb_receipt_amt"] <= 0].index
df.drop(labels=index_0, axis=0, inplace=True)
print(df.info())
# 7.新建一列为各个候选人所在党派party
parties = {
'Bachmann, Michelle': 'Republican',
'Romney, Mitt': 'Republican',
'Obama, Barack': 'Democrat',
"Roemer, Charles E. 'Buddy' III": 'Reform',
'Pawlenty, Timothy': 'Republican',
'Johnson, Gary Earl': 'Libertarian',
'Paul, Ron': 'Republican',
'Santorum, Rick': 'Republican',
'Cain, Herman': 'Republican',
'Gingrich, Newt': 'Republican',
'McCotter,Thaddeus G': 'Republican',
'Huntsman, Jon': 'Republican',
'Perry, Rick': 'Republican'
}
df["partie"] = df["cand_nm"].map(parties)
print(df.head())
# 8.查看party这一列中有哪些不同的元素
print(df['partie'].unique())
# ['Republican' 'Democrat' 'Reform' 'Libertarian' nan]
# 9.统计party列中各个元素出现次数
print(df['partie'].value_counts())
# 10.查看各个党派收到的政治献金总数contb_receipt_amt
print(df.groupby(by="partie")["contb_receipt_amt"].sum())
# 11.查看具体每天各个党派收到的政治献金总数contb_receipt_amt
print(df.groupby(by=["contb_receipt_dt", "partie"])["contb_receipt_amt"].sum())
# 12.将表中日期格式转换为'yyyy-mm-dd。
months = {
"JAN": 1,
"FEB": 2,
"MAR": 3,
"APR": 4,
"MAY": 5,
"JUN": 6,
"JUL": 7,
"AUG": 8,
"SEP": 9,
"OCT": 10,
"NOV": 11,
"DEC": 12
}
def tranformDate(d):
day, month, year = d.split("-")
month = months[month]
return "20{0}-{1}-{2}".format(year, month, day)
df["contb_receipt_dt"] = df["contb_receipt_dt"].map(tranformDate,)
# 13.查看老兵(捐献者职业)DISABLED VETERAN主要支持谁
print(df.head())
old_man = df.loc[df["contbr_occupation"] == "DISABLED VETERAN"]
old_group = old_man.groupby(by="cand_nm")["contb_receipt_amt"].sum()
print(old_group)