使用Panda
库读取文件时,经常会返回一个Dataframe
结构的数据,本文主要记录一下如果操作该数据结构。
读取Dataframe
filename = ‘XXX’
data = pd.read_csv(filename, sep=’,’)
data = np.array(data)
这个函数(read_csv
)有几个参数比较重要,一个是encoding
,可以选择utf-8
,避免中文乱码;另一个是index_col
,用于行索引的列标号或者列名;再是header
,用于列名的行号,pd.read_csv
函数中默认为0(默认第一行就是列名,不读进去),如果第一行不是列名,而是正儿八经的数据,那就令header=None
方法1:直接操作Dataframe
假设数据如下:
- 我们可以直接根据列名选取一列,返回一个
Series
,例如 :data["id"]
这样直接返回这一列 - 也可以同时选择多个列,例如
data["id",'AL']
,就返回两个列
如果我们想返回行,不可以直接输入数字,要以切片的形式:data[0:3]
返回1,2,3行
再举几个例子:data[:2]
返回1,2行data[2:]
返回第3行以后的行 - 注意1,这里的切片它的区间是左闭右开的,右边最后一个取不到
- 注意2:如果想同时取行列,必须要用两个中括号 因为你想啊,如果只有一个中括号,例如
data[0:2,"id","AL"]
这样其实相当于取列,因为是逗号隔开的,取列用逗号隔开(因为这个逗号本身就不是行列的分隔符,与数组中的逗号不一样,数组中逗号是行列分隔符),但是前面的0:2
明显又不是取列的操作,所以会报错! 正确做法是data[0:2]["AL","id"]
- 注意3:这个不能用切片的方法取列,切片的只能取行。例如
data['id':'AL']
是错误的 。 所以这种方法操作起来并不方便,通常用以下两种方法。
方法2:利用loc()
操作Dataframe`
loc(location)
,这在教室里找不认识的同学的位置一样的,找人肯定要知道名字或者身高形体(条件),所以loc
就只能用条件或者行列的名字来进行筛选;- 读取某一列:
data.loc[,:"id"]
data.loc[:,"id":"AL"]
这个就和操作正常数组是一样的 - 读取某一行:
data.loc[2,:]
(这个2是指行名,如果没有行名,也就是index_col=None
,就直接写行号(行号就是123456这种,行名就是命名)) - 想要同时读取列和行,可以一个中括号内,也可以两个中括号
data.loc[2,‘id’]
或者data.loc[2]['id']
方法3:利用iloc()
操作Dataframe`
iloc(indx location)
,index
是什么,我把它当作是索引位置,第几行第几列的意思,所以iloc是用第几行第几列这样的数字来筛选的。 用行号、列号来操作。- 读取某一列:
data.iloc[,:3]
data.iloc[:,3:6]
这个就和操作正常数组是一样的 - 读取某一行:
data.iloc[2,:]
(这个2是指行名) - 想要同时读取列和行,可以一个中括号内,也可以两个中括号
data.loc[2,3’]
或者data.loc[2][3]
drop
方法
Dataframe
可以通过drop
函数直接去掉指定的行或者列(当有些数据不需要时)。例如:
data.drop(1,axis = 0)
去掉第2行
data.drop([1,5,6,8],axis = 0)
去掉第2 6 7 9行
data.drop(‘col1’,axis = 1)
去掉第1列 (假设第一列的列名叫col1)
data.drop([‘col1’, ‘col3’],axis = 1)
去掉第1,3列(假设第1,3列的列名叫col1、col3)