原文地址:https://www.kesci.com/home/project/5c418c295c4cef002c33940d/code
注:代码是在Pycharm上写的。里面用到的数据来自国家统计局(http://data.stats.gov.cn/adv.htm?m=advquery&cn=E0105)。
1. pandas基本信息检索
(1)基本情况
import pandasas pd
df = pd.read_csv("2015年国内主要城市年度数据.csv")
print('--'*20, '\n【1】数据集基本情况探索')#--输出20次然后换行输出“【1】数据集基本情况探索”
print('\n>>>', df.shape, df.shape[0], df.shape[1])#样本形状(行数和列数)、样本数(行数,这里是36个省)、特征数(列数,这里是包括地名和11个指标)探索
print('\n>>>', df.index, df.index.tolist(), df.columns)#样本索引、索引转换成列表、列名探索
print('\n>>>', df['年份'].dtypes, '\n', df.dtypes)#某列类型、全部样本类型探索
print('\n>>>')
print(df.info())#样本基本情况探索,是上面方法的统一
(2)数量探索
print('--'*20, '\n【2】数量探索')
print('\n>>>', df['年份'].count(), '\n', df.count())#探索某列、全部样本非NA值的数量
print('\n>>>', df['年份'].values, '\n', df.values)# 探索某列的值,也可以探索全部样本的值
print('\n>>>', df['第一产业增加值(亿元)'].value_counts().head())# 探索某列中各元素值出现的次数(只能探索某列的),head代表看前5个
print('\n>>>', df['第一产业增加值(亿元)'].value_counts())# 探索某列中各元素值出现的次数(只能探索某列的)
print('\n>>>', df['国内生产总值(亿元)'].unique(), df.nunique())# 探索某列唯一值元素、每一列唯一值的数量
print('\n>>>', df.isnull().sum(), '\n', df.notnull().sum())# 探索每一列缺失值数量、不是缺失值数量
print('\n>>>', df['年份'].head(), '\n', df[['地区', '年份']].head())# 某列取值、多列取值
(3)相关性分析
print('--' *20, '\n【3】探索特征之间相关性')
print('\n>>>', df['年末总人口(万人)'].var(), df.var())# 探索某列、全部样本的方差
print('\n>>>', df['年末总人口(万人)'].std(), df.std())# 探索标准差
print('\n>>>', df.cov().iloc[:4, :4])# 探索变量间的协方差,iloc[:4, :4]代表只展示前4行前4列
print('\n>>>', df.corr().iloc[:4, :4])# 探索变量间的相关性
(4)汇总统计
print('--' *20, '\n【4】样本数据汇总统计')
print('\n>>>', df.sum())# 每一列求和
print('\n>>>', df['地区'].cumsum().head())# 某列逐行累加(可以全部样本每一列都累加)
print('\n>>>', df.max().head(), df.min().head())# 最大最小值
print('\n>>>', df['国内生产总值(亿元)'].idxmax(), '\n', df['国内生产总值(亿元)'].idxmin())# 返回 '国内生产总值' 列最大、最小值所对应的索引号
print('\n>>>', df.mean(), df.median())# 平均值、中位数
print('\n>>>', df.describe().T)# 汇总统计信息,是上面方法的统一,T是transverse行列转置
(5)数据抽样
有时候我们做研究分析或者数据量过大时,只希望抽取一部分数据做研究,因此要进行数据抽样处理
print('--' *20, '\n【5】数据抽样')
data = df.sample(n=5, replace=False)# 不放回随机抽样 5 个数据
print(data)
2. pandas中的应用函数apply
我们发现数据集中有浮点型数据,但是我们只需要整形数据,因此我们很有必要使用应用函数对原数据进行类型转换
apply(func[, args[, kwargs]]) 函数用于当函数参数已经存在于一个元组或字典中时,间接地调用函数。args是一个包含将要提供给函数的按位置传递的参数的元组。如果省略了args,任何参数都不会被传递,kwargs是一个包含关键字参数的字典。
apply()的返回值就是func()的返回值,apply()的元素参数是有序的,元素的顺序必须和func()形式参数的顺序一致
import numpyas np
def fun(x):
x =int(x)
return x
f =lambda x: x +'QQ' #lamda定义匿名函数,结果类似于x=xQQ,即输入北京,输出北京QQ
data1 = df['国内生产总值(亿元)'].apply(fun)
data2 = df['地区'].apply(f)
data3 = df.iloc[:, :].apply(np.sum)#每一列求和
print(data1.head(), '\n', data2.head(), '\n',data3)
3. 合并数据
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False)
objs:合并的目标;axis:需要合并的轴,0是行,1是列;join:连接的方式,innner是交集,outer是并集;
可以增加key参数来识别数据源自于哪张表,keys=['x', 'y', 'z']表示将三个合并的数据集分别表示为xyz;
如果有join_axes的参数传入,可以指定根据哪个轴来对齐数据,如根据df1表对齐数据,就会保留指定的df1表的轴,然后将其它的表与之拼接;
如果两个表的index都没有实际含义,使用ignore_index参数,置true,合并的两个表就根据列字段对齐,然后合并,最后再重新整理一个新的index;
链接:https://blog.csdn.net/mr_hhh/article/details/79488445
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False,
validate=None)
链接:https://blog.csdn.net/brucewong0516/article/details/82707492
import pandasas pd
df1 = pd.read_csv("2015年国内主要城市年度数据.csv")
df2 = pd.read_csv("2016年国内主要城市年度数据.csv")
df3 = pd.read_csv("2017年国内主要城市年度数据.csv")
df_1 = pd.concat(objs=[df1, df2, df3], axis=0)# 合并数据,以行的维度合并
df_2 = pd.merge(left=df1, right=df2, on='年份', how='outer')# 以指定值合并,在本案例中不实用
df_1.sample(n=7, replace=False)# 随机不放回抽样 7 个数据