我们在用python进行数据分析时,pandas包是一个非常好的辅助工具,熟练的利用pandas可以让我们在做EDA时有更高的效率,因此了解pandas的基本用法是很必要的。
pandas的2个基本结构Series和DataFrame
我们可以这么理解Series,它就是一组数据(必须是同一类型的numpy数据)加上用于索引的index,例如:
import pandas as pd
values = pd.Series(data=[1,2,3,4,5], name='Values', dtype='int')
values
而dataframe可以看做是Series的字典,也就是其为不同的key对应着不同的Series的dict:
names = pd.Series( data = ['Allen','Bob','Chris','Dave','Ed','Frank','Gus'])
gpas = pd.Series( data = [4.0, 3.0, 3.4, 2.8, 2.5, 3.8, 3.0])
years = pd.Series( data = ['So', 'Fr', 'Fr', 'Jr', 'Sr', 'Sr', 'Fr'])
series_dict = { 'Name': names, 'GPA': gpas, 'Year' : years } # dict of Series, keys are the series names
students = pd.DataFrame( series_dict )
students
我们来用dict的方法来使用dataframe:
students['GPA']
可以看到,这就是一个Series。
DataFrame列和行操作
列选取
上一小节看到,如果单独选取dataframe的某一列,可以用students['GPA']这样的形式,但返回的是一个Series。但我们现在想选取多个列,且返回的仍然是dataframe结构。这时只要字段外部再加一个中括号即可,这里不说明原因,pandas就是这么规定的!例:
students[['GPA', 'Name']]
可以看到,这里得出的结果仍然是datafram结构。
行选取
我们可以使用逻辑语句来索引dataframe的行,例如我们需要选取gpa大于3的学生:
students[students['GPA'] > 3]
当然,我们可以用切片的方式选取特定的行,但要借助iloc函数(切片是依据index来的,如果index不是整数的话我们使用loc函数来取代iloc函数):
students.iloc[0:2,:]
遍历DataFrame
我们可以试着直接遍历一个dataframe:
for student in students:
print (student)
我们发现打印出来的是key的名字,这是因为dataframe本身就是Series的字典结构,而在python语言里打印dict时输出就是其key列表。
我们可以使用行索引循环的方来遍历:
插入行和插入列
插入列可以使用inster函数:
# 参数为位置,名字,数据(可以是Series,array-like格式的数据)
students.insert(4,'test',[1,2,3,4,5,6,7])
students
插入行可以使用append函数,但要是使用dict类的数据,dict,DataFrame都可以:
students.append({'GPA':1,'Name':'2','Year':'Fr','Deans List':'No','test':8}, ignore_index=True)
修改某个单元的值
可以使用loc来定位单元并直接赋值,如:
students.loc[0, 'GPA'] = 70
意为在第0行,'GPA'列的单元赋值70
参考文献:
[2] pandas官方文档