【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



相关文章
|
1月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
75 0
|
1月前
|
数据处理 Python
在数据科学领域,Pandas和NumPy是每位数据科学家和分析师的必备工具
在数据科学领域,Pandas和NumPy是每位数据科学家和分析师的必备工具。本文通过问题解答形式,深入探讨Pandas与NumPy的高级操作技巧,如复杂数据筛选、分组聚合、数组优化及协同工作,结合实战演练,助你提升数据处理能力和工作效率。
44 5
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
47 2
|
1月前
|
存储 数据采集 数据处理
效率与精准并重:掌握Pandas与NumPy高级特性,赋能数据科学项目
在数据科学领域,Pandas和NumPy是Python生态中处理数据的核心库。Pandas以其强大的DataFrame和Series结构,提供灵活的数据操作能力,特别适合数据的标签化和结构化处理。NumPy则以其高效的ndarray结构,支持快速的数值计算和线性代数运算。掌握两者的高级特性,如Pandas的groupby()和pivot_table(),以及NumPy的广播和向量化运算,能够显著提升数据处理速度和分析精度,为项目成功奠定基础。
38 2
|
1月前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
51 3
|
1月前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
77 5
|
1月前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
47 2
|
1月前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
69 2
|
2月前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--进阶
Python数据分析篇--NumPy--进阶
22 0
|
3月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
110 0