同上本节主要介绍pandas两个基本功能,排序和映射,写这个的目的只是简单的记录一下我的理解,其中肯定会有错误或者不全面看的时候要注意一下。
第一: 本节介绍的排序操作是指,根据原始数据中某列数据中值的大小重新调整每行记录
第二: 本节介绍的映射是指: 对于数据集中某列施加一个函数之后, 将其转化到另一个数据之中
比赛时排序这个功能主要和时间序列相关,所以在这使用的例子的所以设置为时间类型,排序主要分为使用sort_index()对数据进行重新排序应该注意的几点信息, PS本来想用时间序列进行分类的,但是太麻烦了,所以打算放到后面groupby()时使用。
使用排序操作时应该注意一下几点信息:
第一、进行排序之后,排序的结果并不会修改原始数据,所以如果需要需要修改原始数据中的数据, 设置inplace = True
第二、排序之后使用reset_index()将设置好的索引重新定位
第三、将某一列设置为索引之后,最后一定要使用reset_index()函数,因为你将某列设置成索引之后,如果你不使用reset_index()函数时, 则该列数据就会‘丢失’。
第四、我发现pandas中的封装的函数一般都不会直接修改原始数据中的信息,如果想要修改原始数据中的信息,一般要设置个****= True的选项。
import pandas as pd
data = {'name': ['YYLin', 'YYLin_1', 'YYLin_2', 'YYLin_3', 'YYLin_4'],
'birth_day': ['2000-01', '2001-02', '2005-03', '2001-04', '2002-06'],
'age': [6, 7, 8, 9, 10]}
frame = pd.DataFrame(data)
# 第一种方式 使用某列数据的值进行排序
inplace = False
if inplace:
frame.sort_values(by='birth_day', inplace=True)
else:
frame.sort_values(by='birth_day')
print("按照birth_day进行排序的结果:\n", frame)
# 第二种使用索引进行排序 首先是设置索引 然后按照大小逆序排序
frame.set_index('age', inplace=True)
print("按照索引进行排序的结果:\n", frame.sort_index(ascending=False))
# 其中一个可选参数为drop=True为真时,会将原始数据设置的索引直接删除
drop = False
if drop:
print("重新恢复索引之后数据的状态:\n", frame.reset_index(drop=True))
else:
print("重新恢复索引之后数据的状态:\n", frame.reset_index())
使用apply()函数应该注意的几点信息:
第一: 调用apply的对象, 也即是你想进行数据转化的列元素,是将整列数据一起传进来的。
第二: 如果想改变每个元素的取值,可以使用lambda函数逐个改变 不确定对不对
第三: apply修改某列中的数据之后,并不会修改原始的数据,所以你需要修改原始数据的值时,最后需要一个复制操作
import pandas as pd
import math
# 主要介绍函数的应用如何使用apply 进行函数的映射
data = {'name': ['YYLin', 'YYLin_1', 'YYLin_2', 'YYLin_3', 'YYLin_4'],
'birth_day': [2000, 2001, 2005, 2001, 2002],
'age': [6, 7, 8, 9, 10]}
# 生成DataFrame类型
frame = pd.DataFrame(data)
print("原始数据集中的数据信息是:\n", frame)
# 对原始数据求指数 然后使用apply应用该函数
f = lambda x: math.log(x)
use_return_value = False
# 对某一列应用了apply之后需要需要将其赋值给原始列 不然数据不会修改
if use_return_value:
frame['age'] = frame['age'].apply(f)
else:
frame['age'].apply(f)
print("经过apply之后的数据是:\n", frame)