【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(3)

简介: 【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(3)

#导包
import pandas as pd
import numpy as np
import random
# 读取pandas120数据文件
df = pd.read_excel('/home/mw/input/pandas1206855/pandas120.xlsx')
df.head()
# 构建nan数据
df['value'] = [random.randint(1,100) for i in range(len(df))]
df.loc[[2,10,45,87], 'value'] = np.nan

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


1. 判断缺失值


# 检查数据中是否含有任何缺失值:
df.isnull().values.any() # 输出True
# 查看每列数据缺失值:
df.isnull().sum() 
#####输出#########
 createTime    0
 education     0
 salary        0
 value         4
 dtype: int64
###################
# 查看每列非缺失值数:
df.notnull().sum()
df.shape[0] - df.isnull().sum()
#####输出#########
createTime    135
education     135
salary        135
value         131
dtype: int64
###################


2. 缺失值填充


# 用上下平均值填充value列:
df['value'] = df['value'].fillna(df['value'].interpolate())
df.head()
# df  (注意赋值,如果不赋值,原始序列未改变)
# 将value列缺失值全部替换为1.0:
df.fillna(value =1.0, inplace = True)

createTime
education salary value
0 2020-03-16 11:30:18 本科 20k-35k 38.0
1 2020-03-16 10:58:48 本科 20k-40k 9.0
2 2020-03-16 10:46:39 不限 20k-35k 39.5
3 2020-03-16 10:45:44 本科 13k-20k 70.0
4 2020-03-16 10:20:41 本科 10k-20k 88.0


3. 删除缺失值


# 删除所有存在缺失值的行:
df.dropna(axis=0, how='any', inplace=True)
# 删除所有有缺失值的行
df.dropna() # -- 默认axis=0
# 删除所有有缺失值的列
df.dropna(axis='columns')
df.dropna(axis=1)
# 删除所有值缺失的行
df.dropna(how='all')
# 删除至少有两个非缺失值的行
df.dropna(thresh=2)
# 指定判断缺失值的列范围
df.dropna(subset=['education', 'value'])
# 使删除和的结果生效
df.dropna(inplace=True)
# 指定列的缺失值删除
df.value.dropna()


4.数据排序


# 按照value列值大小进行排序
df.sort_values(by=['value'], ascending=True)  #注:ascending:True升序,False降序


5.设置value2列保留两位小数


# 方法一:round()函数
df['value2'].round(2)
# 方法二:map + lambda
df['value2'].map(lambda x : ('%.2f') % x)
# 方法三:map + lambda + format
df['value2'] = df['value2'].map(lambda x : format(x, '.2f'))


6.数据合并:concat, merge, append, join


用的时候chatgpt吧 太难记了

join 最简单,主要用于基于索引的横向合并拼接

merge 最常用,主要用于基于指定列的横向合并拼接

concat最强大,可用于横向和纵向合并拼接

append,主要用于纵向追加


7.常见统计函数


print('grade列均值:',df['grade'].mean()) # 均值
print('全体平均数:',df.mean().mean()) # 全体平均数
print('grade列中位数:',df['grade'].median()) # 中位数
print('grade列方差:',df['grade'].var()) # 方差
print('grade列标准差:',df['grade'].std()) # 标准差
print('grade列最大值:',df['grade'].max()) # 最大值
print('grade列最小值:',df['grade'].min()) # 最小值


8.agg()函数


  • 聚合函数,对分组后数据进行聚合,默认情况对分组后其他列进行聚合;
df[['grade', 'cycle']].agg([np.sum, np.mean, np.median, np.min, np.max, np.std, np.var])



grade
cycle
sum 23.00000 15.0
mean 4.60000 3.0
median 5.00000 2.0
amin 2.00000 1.0
amax 6.00000 6.0
std 1.67332 2.0
var 2.80000 4.0


9.分组计算


  • 主要的作用是进行数据的分组以及分组后地组内运算;

例如: 按course列分组后,grade列元素最多的是?

# 方法一:head()取行
df[['course', 'grade']].groupby('course').sum().sort_values(by='grade', ascending=False).head(1)



grade
course
Java 6


作业:


import pandas as pd
import numpy as np
import random
# 载入数据
data = pd.read_excel('/home/mw/input/pandas1206855/pandas120.xlsx')
# 将salary列数据转换为最大值与最小值的平均值
df = data.copy()
df['salary'] = df['salary'].map(lambda x: [int(x[0:-1]) for x in x.split('-')]) 
df['salary'] = df['salary'].map(lambda x: ((x[0] + x[1])*1000) / 2) 
df['salary'] = df['salary'].astype('int')
# 计算salary列最大最小值之差(极差),设置列名为ptp
df['ptp'] = df['salary'].max() - df['salary'].min()
# 新增一列根据salary列数值大小划分为三个层次['低', '中', '高'],列名命名category
df['salary'] = df['salary'].astype('int')
df['category'] = pd.cut(df['salary'], [0, 5000, 20000, 50000], labels=['低', '中', '高'])
# 根据createTime列,拆分两列字段:日期(年-月-日格式)、小时,分别命名date,hour
# for i in range(len(df)):
#     df['date'] = df.iloc[i, 0].to_pydatetime().strftime('%Y-%m-%d %H:%M:%S')
df['date'] = df['createTime'].apply(lambda x: str(x.year) + '-0' + str(x.month) + '-' + str(x.day))
df['hour'] = df['createTime'].apply(lambda x: x.hour)
# 统计在2020-03-16这一天,每个小时的平均工资、平均极差(每行数据极差都是41500)、本科和硕士学历个数,薪资层次中高中低的个数,
# 数据框展示的列分别有date,hour,mean_salary,mean_ptp,count_college,count_master,count_low,count_meddle,count_high;
# 并将平均工资保留两位小数,最后按照date,hour升序排序
# mean_salary 平均工资保留两位小数
# 按照date,hour升序排序
# 请注意按照要求输出答案
# 筛选出2020-03-16这一天的数据
dff = df.loc[df['date'].isin(['2020-03-16'])]
## 对education和category进行dummy处理
dff = pd.get_dummies(dff, prefix=['学历', '等级'], columns=['education', 'category'])
## 按照date和hour分组统计,计算各类数据
df2 = dff.groupby(['date', 'hour']).agg({'salary': ['mean'],
                                             'ptp': ['mean'],
                                             '学历_本科': ['sum'],
                                             '学历_硕士': ['sum'],
                                             '等级_低': ['sum'],
                                             '等级_中': ['sum'],
                                             '等级_高': ['sum']})
df2.reset_index(inplace=True)
df2.columns = [[' '.join(col).strip() for col in df2.columns]]
df2['ptp mean'] = df2['ptp mean'].astype('int')
df2['salary mean'] = df2['salary mean'].round(2)
data = pd.concat([df2.iloc[:, 0], df2.iloc[:, 1], df2.iloc[:, 2], df2.iloc[:, 3], df2.iloc[:, 4], df2.iloc[:, 5],
                  df2.iloc[:, 6], df2.iloc[:, 7], df2.iloc[:, 8]])
df3 = pd.DataFrame(data, columns=['answer'])
df3['id'] = range(len(df3))
df3 = df3[['id', 'answer']]
df3.to_csv('answer_3.csv', index=False, encoding='utf-8-sig')


收获


53b6a7148143b6f643e733980053ecba_555dd1a04d6842c397cd3ded3aef5276.png


0714a5e255a80d556b05a78f76b92e7c_c12c0760f64d4a37a9902764bf97e5ec.png



相关文章
|
6天前
|
数据采集 数据可视化 数据处理
Python数据科学:Pandas库入门与实践
Python数据科学:Pandas库入门与实践
|
6天前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
14天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
33 2
|
6天前
|
数据采集 数据可视化 数据挖掘
Python数据分析:Pandas库实战指南
Python数据分析:Pandas库实战指南
|
12天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
12天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
12天前
|
分布式计算 并行计算 大数据
Python编程中的高效数据处理技巧
Python编程中的高效数据处理技巧
31 0
|
2月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
79 0
|
3月前
|
机器学习/深度学习 数据处理 计算机视觉
NumPy实践宝典:Python高手教你如何轻松玩转数据处理!
【8月更文挑战第22天】NumPy是Python科学计算的核心库,专长于大型数组与矩阵运算,并提供了丰富的数学函数。首先需安装NumPy (`pip install numpy`)。之后可通过创建数组、索引与切片、执行数学与逻辑运算、变换数组形状及类型、计算统计量和进行矩阵运算等操作来实践学习。NumPy的应用范围广泛,从基础的数据处理到图像处理都能胜任,是数据科学领域的必备工具。
60 0
|
20天前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
28 3
下一篇
无影云桌面