【Python_042】Pandas数据处理

来源 和鲸社区 和鲸训练营 第二期
第一期笔记见Pandas基础 | 实战

import pandas as pd
import numpy as np

# 1.读取本地EXCEL数据
df = pd.read_excel(r"E:\pandas120.xlsx")

# 2.查看df数据前5行
df.head()
'''
createTime	education	salary
0	2020-03-16 11:30:18	本科	20k-35k
1	2020-03-16 10:58:48	本科	20k-40k
2	2020-03-16 10:46:39	不限	20k-35k
3	2020-03-16 10:45:44	本科	13k-20k
4	2020-03-16 10:20:41	本科	10k-20k
'''

# 3.将salary列数据转换为最大值与最小值的平均值
df['salary'] = df['salary'].apply(lambda x: (int(str(x).replace('k','').split('-')[0]) + int(str(x).replace('k','').split('-')[1]))/2*1000)

# 4.将数据根据学历进行分组并计算平均薪资
df.groupby(['education'])['salary'].mean().reset_index().sort_values('salary',ascending=False)

# 5.将createTime列时间转换为月-日
## 方法一
df['createTime'].apply(lambda x: str(x)[5:10])

##方法二
df['createTime'].apply(lambda x: str(x.month)+'-'+str(x.day))

# 6.查看索引、数据类型和内存信息
df.info()

# 7.查看数值型列的汇总统计
df.describe()

# 8.新增一列根据salary将数据分为三组
## 数据分箱 pd.cut( x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ) 
## bins 若填整数,则把x等分成几份。right=True,默认包含最右侧的数值。
## pd.cut用法详见https://zhuanlan.zhihu.com/p/143589729
bins = [0,5000, 20000, 50000]
group_names = ['低', '中', '高']
df['categories'] = pd.cut(df['salary'], bins, labels=group_names)
df

# 9.按照salary列对数据降序排列
df.sort_values(['salary'],ascending=False)

# 10.取出第33行数据
df.iloc[32]

# 11.计算salary列的中位数
df['salary'].median()

# 12.绘制薪资水平频率分布直方图
import matplotlib.pyplot as plt
from jupyterthemes import jtplot

%matplotlib inline  
jtplot.style(theme='onedork') #选择一个绘图主题

plt.hist(df['salary'])

# 13.绘制薪资水平密度曲线
##方法一
import seaborn as sns
sns.kdeplot(df['salary'],shade=True)

## 方法二
df['salary'].plot(kind = 'kde',xlim=(0,80000))

# 14. 删除最后一列categories
## 方法一
df.drop(['categories'],axis=1,inplace=True)
## 方法二
del df['categories']

# 15.将df的第一列与第二列合并为新的一列
df['tmp1'] =  df['education']+df['createTime']

# 16.将education列与salary列合并为新的一列
## map():对series使用
## apply():对df的一行或一列操作
## applymap():对df的每个数据进行操作,返回df
df['tmp2'] =  df['education']+ df['salary'].map(str)
df

# 17.计算salary最大值与最小值之差
df['salary'].max()-df['salary'].min()

# 18.将第一行与最后一行拼接
## 方法一
pd.concat([df.loc[[0]],df.loc[[len(df)-1]]])

## 方法二
pd.concat([df[0:1],df[-2:-1]])

# 19.将第8行数据添加至末尾
df.append(df.loc[[7]])

# 20.查看每列的数据类型
df.dtypes

# 21.将createTime列设置为索引
df.set_index('createTime')

# 22.生成一个和df长度相同的随机数dataframe
df2= pd.DataFrame(np.random.randint(1,100,len(df)))

# 23.将上一题生成的dataframe与df合并
df = pd.concat([df,df2], axis=1)

# 24.生成新的一列new为salary列减去之前生成随机数列
df['new'] = df['salary'] - df[0]

# 25.检查数据中是否含有任何缺失值
df.isnull().values.any()

# 26.将salary列类型转换为浮点数
df['salary'] = df['salary'].map(float)

# 27.计算salary大于10000的次数
df[df['salary']>10000]['salary'].count()

# 28.查看每种学历出现的次数
df.groupby(['education'])['education'].count()

# 29.查看education列共有几种学历
df['education'].value_counts()

# 30.提取salary与new列的和大于60000的最后3行
df[df['salary']+df['new']>60000].tail(3)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值