继续来学习pandas。
接上篇
3.4 自动填充
excel里可以按住单元格右下角往下拉,就自动按规则填充数据,在pandas里怎么做呢?
其实,就是个循环赋值,规则自己写就行了。
比如:
#------------------------
#读一个excel文件,里面的表格是啥样是知道的
books = pd.read_excel("C:/temp/1.xlsx") # books就是一个dataframe
#假如文件里有数据的表格不是从左上角开始的,是否能自动识别表格区域跳过空的,结果是不行。
#得加参数,要这样:
#books = pd.read_excel("C:/temp/1.xlsx", skiprows=3) #意思是跳过3个空行
#要跳过空的列,得用usecols,这个意思是设置数据所在的列范围
#books = pd.read_excel("C:/temp/1.xlsx", skiprows=3, usecols="C:F")#跳过3行,列从C到F
#------------------------
#下面开始赋值,books["列名"]就是拿到这一列的Series
books["ID"].at(0) = 100 #就是给books的ID列第0行赋值。
#要给这一列按增加1的规律赋值就循环赋值
for i in books.index:
books["ID"].at(i) = i+1
#------------------------
#上面这样赋值最终这一列的默认类型是float,要设为int的话,就还要在一开始这么来:
#books = pd.read_excel("C:/temp/1.xlsx", skiprows=3, usecols="C:F",index_col=None,dtype=["ID":str])
#就是读取文件的时候,要把这一列设为str,为什么不直接转int,因为会报错,所以要转string
#------------------------
#如果想给其他列赋值,就都在for循环里整就行了。
#------------------------
#for循环里的那一句赋值,也可以直接用 dataframe来直接设置
#比如
#books.at(i, 'ID') = i+1 #就是行和列直接定位赋值了
#------------------------
如果要得到的这一列,是根据其他列计算得到的,比如说我们要算一个打折后的价格,原价格列为price,打折列是discount,那我们最终的结果列result,每一列的值就可以这么算:
books['result'] = books['price'] * books['discount']
3.5 排序
要按照某一个列或者几个列排序,还能从大到小和从小到大排。
#通过price由低到高排序,用dataframe的sort_values, 参数by就是按哪个列排序
books.sort_values(by='price', inplace=True)#inplace参数True就是改变原dataframe不生成新的
#默认从小到大排列,如果要反过来,就加参数acending设为False,默认是True
books.sort_values(by='price', inplace=True, ascending=False) #从大到小排
#如果要两个列排序,先按第一个列排序分类了,再分别按第二个列排序
books.sort_values(by=['worthy','price'], inplace=True )#现在是按worthy列分开了,price是从小到大排
#此时要worthy顺序不变,只变price的话,就加ascending,但是要分别给两个列都设置排序方式:
books_sort_values(by=['worthy','price'], inplace=True,ascending=[True, False]) #分别设
3.6 筛选过滤
要通过一些条件筛选出一些数据,比如要筛选年龄多少范围的数据,或者成绩范围的数据。
比如现在有个学生的表,读到students变量
#students现在是dataframe,并且设置ID列作为索引
students = pd.read_excel("C:/temp/1.xlsx", index_col='ID')
现在定义两个筛选函数:
第一个函数是筛选年龄18到30的数据
def age_18_to_30(a):
return a>=18 and a<30 #或18<=a<30
第二个函数是筛选成绩85到100的数据
def level_a(score):
return 85<=score<=100
现在要从表里筛选这两组数据:
#通过年龄条件函数过滤筛选得到的数据,apply里传输函数为参数
students = students.loc[students["Age"].apply(age_18_to_30)]]
#如果还要加个筛选条件,就在后面继续 .loc
students = stuudents.loc[students["Age"].apply(age_18_to_30)].loc[students["Scrore"].apply(level_a)]
好的,这节就先学到这吧,下面就要学习怎么画各种图表了