总统大选

加载数据

#加载包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series, DataFrame

#读取数
resulr_df=pd.read_cse('data/2016-us-ge-by-county.csv')

删除某列或者某行–用drop函数

  1. df.drop([“列名”],axis=1):删除列
    比如:df1.drop([“handsome”,“smart”],axis=1)#删除列名为handsome和smart的整列
  2. df.drop(columns=[“列名”]):删除列
    比入:df1.drop(columns=[“handsome”,“smart”])#删除列名为handsome和smart的整列
  3. df1.drop(columns=[“handsome”,“smart”])#删除列名为handsome和smart的整列
    比如:df1.drop([0,1])#删除索引为0、1的整行
总结:

在drop函数后面用shift+tab可以查看函数的参数明细,如下:
默认参数axis=0,表示对行进行操作,如需对列进行操作需要更改默认参数为axis=1
默认参数inplace=False,表示该删除操作不改变原数据,而是返回一个执行删除操作后的新dataframe,如需直接在原数据上进行删除操作,需要更改默认参数为inplace=True
df1.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=‘raise’)

#删除多余的列
result_df.drop(['StateCode','CountyFips'],axis=1,inplace=True)
result_df.head()
#按候选人分离两张表
trump_df = result_df[result_df['Candidate']=='Trump']
clinton_df = result_df[result_df['Candidate']=='Clinton']
print(trump_df.head())

merge:合并两张表
3.pd.merge()方法设置连接字段。
默认参数how是inner内连接,并且会按照相同的字段key进行合并,即等价于on=‘key’,也可以显示的设置on=‘key’,这里也推荐这么做

#比如
pd.merge(df1,df2)
pd.merge(df1,df2,on='key')

当两边合并字段不同时,可以使用left_on和right_on参数设置合并字段。当然这里合并字段都是key所以left_on和right_on参数值都是key。

#比如
pd.merge(df1,df2,left_on='key',right_on='key')

4.pd.merge()方法设置连接方法。
主要包括inner(内连接)、outer(外链接)、left(左连接)、right(右连接)。
参数how默认值是inner内连接,上面的都是采用内连接,连接两边都有的值。
当采用outer外连接时,会取并集,并用NaN填充。

#比如
pd.merge(df1,df2,left_on='key',how='outer')

外连接其实左连接和右连接的并集。左连接是左侧DataFrame取全部数据,右侧DataFrame匹配左侧DataFrame。(右连接right和左连接类似)

#比如
pd.merge(df1,df2,left_on='key',how='left')

5.pd.merge()方法索引连接,以及重复列名命名。
pd.merge()方法可以通过设置left_index或者right_index的值为True来使用索引连接,例如这里df1使用data1当连接关键字,而df2使用索引当连接关键字。

#比如
pd.merge(df1,df2,left_on='data1',right_index=True)

从上面可以发现两个DataFrame中都有key列,merge合并之后,pandas会自动在后面加上(_x,_y)来区分,我们也可以通过设置suffixes来设置名字。

#比如
pd.merge(df1,df2,left_on='data1',right_index=True,suffixes=('_df1','_df2'))
#重新合成一张表,每个县原来需要2条记录对应不同候选人的信息,现在合成一张。
#on用于连接的列名,存放于两个列表中
result_df=pd.merge(trump_df,clinton_df,
			on=['StateName','CountyName','CountyTotalVote'],
			sufixes=['_t','_c'])
result_df.drop(['Party_t','Party_c','Candidate_t', 'Candidate_c'], axis=1, inplace=True)
#用columns修改列名
result_df.columns =['StateName', 'CountyName', 'TotalVote', 'VoteTrump', 'VoteClinton']
#计算每周的获胜者
'''df[](指输出数据的结果属性名称).groupby([df[属性],df[属性])(指分类的属性,数据的限定定语,可以有多个).mean()(对于数据的计算方式——函数名称)
举例如下:
print(df["评分"].groupby([df["地区"],df["类型"]]).mean())
#上面语句的功能是输出表格所有数据中不同地区不同类型的评分数据平均值'''
[添加链接描述](https://www.cnblogs.com/Yanjy-OnlyOne/p/11217802.html)

result_df=result.groupby(by=result_df['StateName'],as_index=False).sum()#求每个州的票数
result_df.drop([8],inplace=True)#删除第八行
#计算每个州中获胜的人
result_df['T-Ratio'] = result_df['VoteTrump'] / result_df['TotalVote']
result_df['C-Ratio'] = result_df['VoteClinton'] / result_df['TotalVote']
#判断获胜者
'''map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

map() 函数语法:

map(function, iterable, ...)
'''
result_df['Winner']=list(map(lambda x,y:'Trump' if x>y else 'Clinton',result_df['T-Ratio'],result_df['C-Ratio']))

#加载收入数据
income_df = pd.read_csv('data/us/2015-us-income-by-county.csv')
print(income_df.head())
print(income_df.Income.mean())
desc = income_df.describe()
print(desc)
'''loc函数主要通过行标签索引行数据,划重点,标签!标签!标签!'''
print(desc['Income']['75%'])###??
print(desc.loc['50%', 'Income'])##??

#合并收入数据与选票数据
result_df=pd.merge(result_df,income_df,on=['StateName'])
result_df=result_df.sort_values(by='Income',ascending=False)
print(result_df.head())

图形展示
#用来正常显示中文
plt.rcParams['font.sans-serif']=['SimHei']

colors = reslut_df['Winner'].map({'Trump':'Blue', 'Clinton':'Red'})

spot_size = result_df['TotalVote']/6000.0#如何设置点的大小
plt.figure(figsize=(15,10))
plt.scatter(x=result_df["Income"],
            y = result_df['T-Ratio'],
            s=spot_size,
            c=colors,
            alpha=0.25
           )#alpha透明度,

plt.xlabel('人均收入(美元)',fontsize=20)
plt.ylabel('各州Trump得票比率',fontsize=20)
plt.grid(True) # 添加网格
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值