【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天前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
115 1
|
6天前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
64 0
|
6天前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
127 0
|
6天前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
49 0
|
2月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
215 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
2月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
162 0
|
4月前
|
运维 数据挖掘 数据处理
Pandas时间数据处理:从基础到进阶的实战指南
Pandas时间数据处理涵盖了从基础到高级的全面功能。其核心由Timestamp、DatetimeIndex、Period和Timedelta四个类构建,支持精准的时间点与区间操作。内容包括时间数据生成(字符串解析与序列生成)、时间索引与切片、高级运算(偏移重采样与窗口计算)、时区处理、周期性数据分析及实战案例(如智能电表数据)。此外,还涉及性能优化技巧和未来展望,帮助用户高效处理时间序列数据并应用于预测分析等场景。
168 1
|
4月前
|
传感器 安全 数据处理
Pandas时间数据处理:从基础到进阶的实战指南
本文深入讲解Pandas时间数据处理技巧,从时间对象转换到高性能计算全面覆盖。通过真实案例拆解,掌握Timestamp与Period的核心概念、时间序列生成、重采样方法及窗口函数应用。同时剖析时区处理、性能优化策略及常见陷阱解决方案,并展望Pandas 2.0的时间处理新特性。内容强调“时间索引优先”原则,助你高效分析股票K线、用户行为等时间序列数据。
122 0
|
8月前
|
缓存 数据可视化 BI
Pandas高级数据处理:数据仪表板制作
在数据分析中,面对庞大、多维度的数据集(如销售记录、用户行为日志),直接查看原始数据难以快速抓住重点。传统展示方式(如Excel表格)缺乏交互性和动态性,影响决策效率。为此,我们利用Python的Pandas库构建数据仪表板,具备数据聚合筛选、可视化图表生成和性能优化功能,帮助业务人员直观分析不同品类商品销量分布、省份销售额排名及日均订单量变化趋势,提升数据洞察力与决策效率。
141 12
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
281 1

热门文章

最新文章

推荐镜像

更多