数据分析师的学习之路-pandas篇(2)

继续来学习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)]

好的,这节就先学到这吧,下面就要学习怎么画各种图表了

猜你喜欢

转载自blog.csdn.net/gootyking/article/details/134667493
今日推荐