【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



相关文章
|
10月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
745 0
|
10月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
764 1
|
10月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
794 0
|
10月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
462 0
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
905 0
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
498 1
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
1054 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
机器学习/深度学习 数据处理 计算机视觉
NumPy实践宝典:Python高手教你如何轻松玩转数据处理!
【8月更文挑战第22天】NumPy是Python科学计算的核心库,专长于大型数组与矩阵运算,并提供了丰富的数学函数。首先需安装NumPy (`pip install numpy`)。之后可通过创建数组、索引与切片、执行数学与逻辑运算、变换数组形状及类型、计算统计量和进行矩阵运算等操作来实践学习。NumPy的应用范围广泛,从基础的数据处理到图像处理都能胜任,是数据科学领域的必备工具。
312 0
|
机器学习/深度学习 算法 数据可视化
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
特征工程是机器学习流程中的关键步骤,通过将原始数据转换为更具意义的特征,增强模型对数据关系的理解能力。本文重点介绍处理数值变量的高级特征工程技术,包括归一化、多项式特征、FunctionTransformer、KBinsDiscretizer、对数变换、PowerTransformer、QuantileTransformer和PCA,旨在提升模型性能。这些技术能够揭示数据中的潜在模式、优化变量表示,并应对数据分布和内在特性带来的挑战,从而提高模型的稳健性和泛化能力。每种技术都有其独特优势,适用于不同类型的数据和问题。通过实验和验证选择最适合的变换方法至关重要。
893 6
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
505 3

热门文章

最新文章

推荐镜像

更多