pandas 进阶汇总

之前发的pandas零零散散有些乱,汇总一下

数据预览和预处理

在拿到数据第一步当然是对数据做一个大概的浏览,以及对缺失值重复值进行相关处理。

读取数据---- df = pd.read_excel('xxxx')

1.查看数据维度 ------df.shape

2.随机查看5条数据------df.sample(5)

3.查看数据前后5行----- 前5行:df.head()   后5行:df.tail()

4.查看数据信息,看数据类型,有无缺失值-----df.info()

5.查看 **数值型** 列的统计信息,计数、均值什么的----df.describe()

6.计算总的缺失值-----df.isna().sum().sum()     第一个sum()是对各列缺失值,第二个是总计

7.计算各列缺失值-----df.isnull().sum()    isnull和isna是一样的

8.查看缺失值所在行----df [df.isnull.values==True]

9.将缺失值出现的行全部删掉 ---df.dropna()

10.补充缺失值----df.fillna()

11.将全部重复值所在的行筛选出来---df [ df.duplicated() ]

12.删除全部的重复值---- df.drop_duplicates()      

删除全部的重复值,但保留最后一次出现的值   df.drop_duplicates(keep='last')

统计性描述与统计学分析

查看数据

1.修改索引,将学校列作为索引(set_index)

df.set_index("学校名称",inplace= True)

2.数据排序,按总分升序排序并展示前20名(sort_values)


df.sort_values(by='总分', ascending=True).head(20)

3.介绍一个nlargest()函数,用于返回DataFrame中最大的n个值所在的行。

三个参数

这里我们将数据按照 高端人才得分 降序排序,展示前 10 位


df.nlargest(10, '高端人才得分')

4.统计均值-----  df.mean()

5.统计中位数-----df.median()

6.统计众数-----df.mode()

7.统计多种指标用聚合函数agg()

计算 总分、高端人才得分、办学层次得分的最大最小值、中位数、均值

数据筛选和修改

加载数据

1.将原来df列名 unnamed:2,unnamed:3,unnamed:4修改为 金牌数银牌数铜牌数

rename()函数


df.rename(columns={'Unnamed: 2':'金牌数',
                  'Unnamed: 3':'银牌数',
                  'Unnamed: 4':'铜牌数'},inplace=True) 

2.设置索引(set_index())

3.修改索引名(rename_axis())

4.数值替换  replace()

将金牌数列的数字 `0` 替换为 `无`

df['金牌数'].replace(0,'无',inplace=True)

5.查看各列数据类型  df.dtypes()

6.修改类型  astype()


df['金牌数'] = df['金牌数'].fillna('0').astype(int)

7.一次性添加多列数据  df.assign() 


df = df.assign(金铜牌总数=df.金牌数 + df.铜牌数,
         银铜牌总数=df.银牌数+df.铜牌数) 

8.删除行  df.drop()  可以在里面写筛选条件比如

df.drop(df[df.金牌数<20].index)

9.删除列  df.drop(columns=xx,inplace=True)

10.筛选列

通过列号提取第 1、2、3、4 列

df.iloc[:,[0,1,2,3]]   第一个冒号表示筛选所有行

通过列名筛选列

df  [  ['金牌数','银牌数','铜牌数']  ]

11.筛选行

提取第 10 行之后的全部行   df.loc[9:]

提取 金牌数 大于 30 的行    

df[df['金牌数'] > 30]

提取 中国、美国、英国、日本、巴西 五行数据

df.loc[df['国家奥委会'].isin(['中国','美国','英国','日本','巴西'])]

使用 query 提取 金牌数 + 银牌数 大于 15 的国家

df.query('金牌数+银牌数 > 15')

数据分组与聚合

导入数据

1.分组统计均值

计算各区(district)的薪资(salary)均值

df[['district','salary']].groupby(by='district',as_index=False).mean()

as_index 参数意思为是否将分组条件作为索引,默认为True

2.分组统计排序

计算并提取平均薪资最高的区

df[['district','salary']].groupby(by='district').mean().sort_values('salary',ascending=False).head(1)

3.分组统计频率

计算不同行政区(district),不同规模公司(companySize)出现的次数 

df.groupby("district")['companySize'].value_counts()

修改索引

  • district -> 行政区
  • companySize -> 公司规模

pd.DataFrame(df.groupby("district")['companySize'].value_counts()).rename_axis(["行政区", "公司规模"])

4.分组统计计数

统计每个区出现的公司数量

df.groupby('district')['companySize'].count()

 5.分组查看全部

将数据按照 districtsalary 进行分组,并查看各分组内容

6.分组查看指定组

将数据按照 districtsalary 进行分组,并查看西湖区薪资为 30000 的工作

7.以匿名函数得出的值分组

pd.DataFrame(df.groupby([df.createTime.apply(lambda x:x.day)])['district'].value_counts()).rename_axis(['发布日','行政区'])

 

8.分组转换transform

在原数据框 df 新增一列,数值为该区的平均薪资水平


df['该区平均工资'] = df[['district','salary']].groupby(by='district').transform('mean')

transform函数 指定新增列的转换类型。

9.分组过滤filter

提取平均工资小于 30000 的行政区的全部数据

df.groupby('district').filter(lambda x:x['salary'].mean()<30000)

 先暂时汇总到这里,后面再汇总数据透视表等内容。

唉,今天又是当fw的一天。。。。。。。

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值