"""
修改记录:
1.整体修改,通过df[列名]=值,用值来整体替换df[列]的值
2.个别修改:
2.1单只替换:命令格式为:df.repalce('B','A')表示用A值替换B值
2.2指定列值替换:命令格式为:df.replace({'列名 C','A'},B),表示用B值来替换列名为C中的A的值
2.3多值替换:命令格式为df.replace([A,B,C.....],[E,F,G.....]),表示用E,F,G.....来替换A,B,C.....的值
A,B,C.....
"""
from pandas import read_excel
df=read_excel(r'i_nuc.xls',sheet_name='Sheet3');
print(df)
print('-------------------------');
# 全部替换;用0表示数据中缺考成绩
df1=df.replace('缺考',0);
print(df1)
print('------------------------')
#单值替换,用hello 来替换数据中体育成绩中的作弊分数
df2=df.replace({'体育':'作弊'},'hello')
print(df2)
print('-----------------------')
#多值替换,将缺考替换成为hello,将作弊替换成world
df3=df.replace(['缺考','作弊'],['hello','world']);
print(df3);
print('***********************')
'''
交换行与列:
可以使用df。redinex方法来交换数据中的行或列的数据
'''
import pandas as pd
df=pd.DataFrame({'a':[1,2,3],'b':['hello','world','python'],'c':['bei','fang','mingzu']})
print(df);
print('--------------------------------------')
# 交换行
hang=[0,2,1];
df1=df.reindex(hang);
print(df1);
print('-------------------------------------')
# 交换列
lie=['a','c','b']
df2=df.reindex(columns=lie);
print(df2);
# 还可以通过loc的相关语法对数据进行交换
df3=df
df3.loc[[0,2],:]=df3.loc[[2,0],:]#将第一行与第三行的数据进行交换
print(df3);
print('----------------------------')
df4=df
df4.loc[:,['b','a']]=df4.loc[:,['a','b']];
print(df4);
'''
通过交换列,行的方法可以实现插入一个列的数据
1、新增一个列
2、交换这两列的值
3、交换这两列的列名
'''
print('---------------------------')
df['d']=range(len(df.index))
print(df);
print('--------------------------')
# 交换值
df.loc[:,['b','d']]=df.loc[:,['d','b']].values
print(df)
# 交换列名
Lie=list(df.columns)
# 获取列名的index
i=Lie.index('b');
j=Lie.index('d');
print(Lie);
print(i,j)
# 交换两个index
Lie[i],Lie[j]=Lie[j],Lie[i];
# 重新赋值
df.columns=Lie
print(df);
"""
排名索引:
简单的数据计算:通过各个字段对数据进行加减乘除的操作,得出新的字段
"""
from pandas import read_excel
df=read_excel(r'i_nuc.xls',sheet_name='Sheet3')
print('------------------------')
jianji=df['解几'].astype(int);
gaodai=df['高代'].astype(int);
print(jianji)
print(gaodai)
print('------------------------')
df['高代+解几']=jianji+gaodai;
print(df)
print('-----------------------')
"""
数据标准化,也成为数据归一化。为了消除指标之间的量纲的影响,需要进行数据的标准化处理,以解决数据之间的可比性。
数据标准化的常用方法:
1.min-max标准化,公式为:X=(x-min)/(max-min);其中min为最小值,max为数据的最大值
"""
from pandas import read_excel
df=read_excel(r'i_nuc.xls',sheet_name='Sheet3')
print(df['数分'].astype(int))
print('-----------------------')
scale=(df['数分'].astype(int)-df['数分'].astype(int).min())/(df['数分'].astype(int).max()-df['数分'].astype(int).min())
print(scale)
print('-----------------------')
"""
Z-score标准化方法,适用于数据中的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况,其公式为
X=(x-u)/&,其中u表示均值,&表示标准差
使用sklearn.preprocessing.scale()函数,可以直接将给定的数据进行标准化
"""
from sklearn import preprocessing
df1=df['数分']
print(df1)
print('------------------------')
sf_score=preprocessing.scale(df1);
print(sf_score)
print('------------------------')
"""
数据分组:就是根据数据分析对象的特征,按照一定的指标,将数据化分为不同的区间进行研究
其中的命令为:cut(series,bins,right=True,labels=NULL)
其中series表示分组的数据
bins表示分组的依据的数据
right表示分组的时候右边是否闭合
labels表示自定义标签,可以不自定义
"""
from pandas import read_excel
import pandas as pd
df=read_excel(r'rz.xlsx')
print('----------------------------')
print(df.head());
bins=[min(df['解几'])-1,60,70,80,max(df['解几'])+1]#划分的标准
lab=['不及格','及格','良好','优秀'];
demo=pd.cut(df['解几'],right=False,bins=bins,labels=lab);
print(demo);
df['demo']=demo;
print(df);