函数要义:参数,功能,返回值
# series的排序:
# Series.sort_values(ascending = True,inplace = False)
# 参数说明:
# ascending:默认为True升序排序,为False降序排序
# inplace : 是否修改原始的Series
# dataFrame排序:
# DataFrame.sort_values(by,ascending = True,inplace = False)
# 参数说明:
# by : 字符串或者list<字符串>,单列排序或者多列排序
# ascending: bool或者list,升序还是降序,如果是list对应by的多列
# inplace : 是否修改原始DataFrame
# 0 读取数据
import pandas as pd
df = pd.read_csv("beijing_tianqi_2018.csv")
# 换掉温度后面的后缀
df.loc[:,"bWendu"] = df["bWendu"].str.replace("℃","").astype("int32")
df.loc[:,"yWendu"] = df["yWendu"].str.replace("℃","").astype("int32")
# 1 series的排序
df["aqi"].sort_values()
df["aqi"].sort_values(ascending = False)
df["tianqi"].sort_values()
# 2 DataFrame的排序
# 2.1 单列排序
df.sort_values(by = "aqi")
df.sort_values(by= "aqi",ascending = False)
# 2.2 多列排序
# 按空气质量等级、最高温度排序,默认升序
df.sort_values(by=["aqiLevel","bWendu"])
# 两个字段都降序
df.sort_values(by=["aqiLevel","bWendu"],ascending = False)
# 分别指定升序和降序
df.sort_values(by =["aqiLevel","bWendu"],ascending= [False,True])
df.describe()
外访反馈月份 当日合同回款_sum 月初余额_max 月初余额_count
count 45439.00000 4.543900e+04 45439.000000 45439.000000
mean 8.67869 1.072089e+04 51707.858952 1.380378
std 2.09351 2.658717e+04 36289.394148 0.830070
min 6.00000 1.000000e-01 478.150000 1.000000
25% 7.00000 2.000000e+03 26849.020000 1.000000
50% 8.00000 4.471000e+03 45498.300000 1.000000
75% 11.00000 1.000000e+04 69995.690000 2.000000
max 12.00000 2.520000e+06 1000000.000000 18.000000
官方文档
DataFrame.rename(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors=‘ignore’)
#mapper:dict or function
映射关系,可以是字典,也可以是一个函数。
df.rename({0:111})
name mark gender
111 zhao 150 female #行索引从0变为111
1 qian 122 female
2 zhou 155 male
3 wang 132 male
df.rename(lambda x: x+11) #参数也可以是函数,索引都加了11
name mark gender
11 zhao 150 female
12 qian 122 female
13 zhou 155 male
14 wang 132 male
#index、columns、axis:
这3个参数作用类似,dataframe中有行和列两个方向,在改名时,需要指明改名的是行还是列(默认是行),使用df.rename(index = mapper)或者df.rename(columns=mapper)的形式,和df.rename(mapper,axis=0 or 1)的效果是一样的
df.rename(lambda x: x+'11',axis=1)
name11 mark11 gender11 #列索引都加了11,name变为name11
0 zhao 150 female
1 qian 122 female
2 zhou 155 male
3 wang 132 male
df.rename(columns=lambda x: x+'11')#等价于上面,写法更简洁直观
name11 mark11 gender11
0 zhao 150 female
1 qian 122 female
2 zhou 155 male
3 wang 132 male
#copy:bool,default = True
默认为True,效果不清楚。。。文档就一句话,与会复制底层数据(also copy underlying data), 等一个课代表解答一下。
#inplace:bool,default False
将结果返回赋值给原变量,无需再次将结果赋值给新变量。即df.rename(inplace=True)之后,df的值发生改变(pandas中好多方法都有这个参数,此处就演示了)
#level int,level name,default none
针对多层索引,指定需要改名字的索引具体是哪一个。
df1 = pd.DataFrame([10,11,12,13],index=[['a','a','b','b'],[1,2,3,4],[4,3,2,1]],columns=['tt'])
df1
tt #前三列都为索引
a 1 4 10
2 3 11
b 3 2 12
4 1 13
df1.rename(index={1:'dd'})
tt#索引中所有的1都变成了dd
a dd 4 10
2 3 11
b 3 2 12
4 dd 13
df1.rename(index={1:'dd'},level=1)
tt#只有第2列索引改为dd(从0开始计数)
a dd 4 10
2 3 11
b 3 2 12
4 1 13
#errors:{‘ignore’, ‘raise’}, default ‘ignore’
发生错误的处理方式,ignore为忽略,raise为报错。比如改名字是,如果传入的参数中包含索引列没有的值,就会报错,ignore或者raise来决定错误的处理方式
#修改列名字
ret1.columns = ['_'.join(col).strip() for col in ret1.columns.values]
ret1.columns
#直接修改列名
ret1.columns = ['外访反馈月份', '产品', '合同号', '新客户号', '发出时账期']