【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



相关文章
|
3天前
|
Python
使用Python pandas的sort_values()方法可按一个或多个列对DataFrame排序
使用Python pandas的sort_values()方法可按一个或多个列对DataFrame排序。示例代码展示了如何按'Name'和'Age'列排序 DataFrame。先按'Name'排序,再按'Age'排序。sort_values()的by参数接受列名列表,ascending参数控制排序顺序(默认升序),inplace参数决定是否直接修改原DataFrame。
11 1
|
4天前
|
NoSQL Serverless Python
在Python的Pandas中,可以通过直接赋值或使用apply函数在DataFrame添加新列。
在Python的Pandas中,可以通过直接赋值或使用apply函数在DataFrame添加新列。方法一是直接赋值,如`df['C'] = 0`,创建新列C并初始化为0。方法二是应用函数,例如定义`add_column`函数计算A列和B列之和,然后使用`df.apply(add_column, axis=1)`,使C列存储每行A、B列的和。
18 0
|
5天前
|
机器学习/深度学习 数据采集 SQL
【Python机器学习专栏】使用Pandas处理机器学习数据集
【4月更文挑战第30天】本文介绍了如何使用Python的Pandas库处理机器学习数据集,涵盖数据读取、概览、清洗、转换、切分和保存等步骤。通过Pandas,可以从CSV等格式加载数据,进行缺失值、异常值处理,数据类型转换,如归一化、类别编码,并实现训练集与测试集的划分。此外,还展示了如何保存处理后的数据,强调了Pandas在数据预处理中的重要性。
|
6天前
|
Serverless Python
使用Python的pandas和matplotlib库绘制移动平均线(MA)示例
使用Python的pandas和matplotlib库绘制移动平均线(MA)示例:加载CSV数据,计算5日、10日和20日MA,然后在K线图上绘制。通过`rolling()`计算平均值,`plot()`函数展示图表,`legend()`添加图例。可利用matplotlib参数自定义样式。查阅matplotlib文档以获取更多定制选项。
16 1
|
6天前
|
数据采集 SQL 数据挖掘
Python数据分析中的Pandas库应用指南
在数据科学和分析领域,Python语言已经成为了一种非常流行的工具。本文将介绍Python中的Pandas库,该库提供了强大的数据结构和数据分析工具,使得数据处理变得更加简单高效。通过详细的示例和应用指南,读者将了解到如何使用Pandas库进行数据加载、清洗、转换和分析,从而提升数据处理的效率和准确性。
|
6天前
|
数据采集 Web App开发 数据可视化
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
|
9天前
|
新零售 分布式计算 数据可视化
数据分享|基于Python、Hadoop零售交易数据的Spark数据处理与Echarts可视化分析
数据分享|基于Python、Hadoop零售交易数据的Spark数据处理与Echarts可视化分析
21 0
|
9天前
|
人工智能 数据挖掘 Python
Python pandas中read_csv函数的io参数
Python pandas中read_csv函数的io参数
19 5
|
12天前
|
数据采集 数据可视化 数据处理
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
|
12天前
|
机器学习/深度学习 分布式计算 数据可视化
使用Python进行高效数据处理的探索与实践
随着数据时代的来临,数据处理与分析成为了各行各业不可或缺的一环。Python作为一种强大且易学的编程语言,在数据处理领域展现出了卓越的性能。本文将从Python数据处理的基础知识入手,深入探讨如何利用Python的库和框架进行高效的数据处理,并结合实际案例,展示Python在数据处理方面的应用实践。本文旨在为读者提供一份实用的Python数据处理指南,助力读者在数据处理的道路上走得更远。