‘壹’ python—padas(DataFrame)的常用操作
我们先说一下DataFrame是什么:
1、DataFrame是一种数据框结构,相当于是一个矩阵形式,单元格可以存放数值、字符串等,这和excel表很像;
2、DataFrame是有 行(index)和 列(columns)可以设置的;
有了示例,我们就能明白创建时需要传入数据,指定index(行索引名)和columns(列名);
在我们需要将单个元素的字典直接转为DataFrame时,程序会报错,需要适当做些转换,指定行索引或者列索引才行;
在增加列的时候我们用到了一个索引loc,后面我们再详细对loc进行说明,此处先知道可以这样使用。
文本字符串数据处理之前,一定要先转为字符(.str)再进行处理
loc 和 iloc如果容易记混,你就取巧记忆,index是索引
所以iloc则是依据位置索引进行取数,没有i的则是按照名称进行提取数据
原谅我很懒,比较喜欢这样框架式的笔记,所以文字就会比较少(#^.^#)!!!
‘贰’ Python 基本操作- 数据选取loc、iloc、ix函数
loc中的数据是列名,是字符串,所以前后都要取;iloc中数据是int整型,所以是Python默认的前闭后开
构建数据集df
loc函数主要通过行标签索引行数据 ,划重点, 标签!标签!标签!
loc[1] 选择行标签是1的(从0、1、2、3这几个行标签中)
loc[0:1] 和 loc[0,1]的区别,其实最重要的是loc[0:1]和iloc[0:1]
索引某一列数据,loc[:,0:1],还是标签,注意,如果列标签是个字符,比如'a',loc['a']是不行的,必须为loc[:,'a']。
但如果行标签是'a',选取这一行,用loc['a']是可以的。
iloc 主要是通过行号获取行数据,划重点,序号!序号!序号!
iloc[0:1],由于Python默认是前闭后开,所以,这个选择的只有第一行!
如果想用标签索引,如iloc['a'],就会报错,它只支持int型。
ix——结合前两种的混合索引,即可以是行序号,也可以是行标签。
如选择prize>10(prize为一个标签)的,即 df.loc[df.prize>10]
还有&并或等操作
python选取特定列——pandas的iloc和loc以及icol使用
pandas入门——loc与iloc函数
pandas中loc、iloc、ix的区别
pandas基础之按行取数(DataFrame)
‘叁’ python里怎么取前两列
python中获得前两列的方式有很多,需要看是哪一种数据类型。
获取Dataframe对象的前两列
import pandas as pd
可以通过dataframe类型的iloc方法获取前两列,df.iloc[:,0:2]
获取numpy对象的前两列
import numpy as np
a =np.zero(3,3)
print(a[:,0:2])
‘肆’ Python Pandas 依据标签或者位置选取特定行列 loc和iloc两种方式
Pandas中有两种方式可以进行特定行列的选取,一种是在知道每一列的名称(label)的情况下(df.loc),一种是在只知道列的位置(integer-location)的情况下(df.iloc)。
可以看出,上述的冒号(:)意味着选取所有的行,所以只需在此处进行改动即可选取特定行(前开后闭)
同样在选取特定行的时候,依然存在基于label或者是基于integer-location的选择
选取行采用df.iloc方式,具体如下
除此之外,在采用非标签的方式选择的时候,可以通过输入布尔型变量进行筛选,比如 df.iloc[[True, False, True]] ,或者是 df.iloc[lambda x: x.index % 2 == 0]
完结撒花,反正知道了df.loc和df.iloc的差别之后自由组合就好了~
参考资料: https://pandas.pydata.org/pandas-docs/stable/reference/frame.html#indexing-iteration
‘伍’ python pandas -->loc、iloc用法
基础数据如下:
1.1.1、通过行名称获取整行数据:
1.1.2、通过行名称,列名称定位数据:
1.1.3、通过切片行标签和单个标签列,获取一组数据:
1.1.4、通过条件筛选数据:
二、iloc :通过整数位置获得行和列的数据。
(主要是通过行号获取行数据,划重点,序号!序号!序号!
iloc[0:1],由于Python默认是前闭后开,所以,这个选择的只有第一行!)
‘陆’ 怎样用 Python 进行数据分析
做数据分析,首先你要知道有哪些数据分析的方法,然后才是用Python去调用这些方法
那Python有哪些库类是能做数据分析的,很多,pandas,sklearn等等
所以你首先要装一个anaconda套件,它包含了几乎所有的Python数据分析工具,
之后再学怎么分析。
‘柒’ pandas索引取数
注:《利用python进行数据分析》的学习笔记-pandas
import pandas as pd
import numpy as np
一维数组,包含一个数组对象,一个索引对象,索引对象默认为0开始的递增数字,可通过index=[idx1, idx2, ...]参数指定
可通过索引选取/修改相应的数据,选取:data=series[idx], 修改:series[[idxm, idxn, ...]]=[dm, dn, ...]
series可看成定长有序字典,索引到数据的映射,series可用于字典参数的函数中。idxn in series返回True/False
多个series做算术操作,会自动对齐不同索引的数据,无此数据自动填充NaN
可看作多个series组成的表单,dataframe有两种索引,与series相同的index行索引,还有columns列索引
选取/修改一行数据 dataframe.loc['index']
选取/修改一列数据 dataframe['column'], dataframe.column
obj.reindex(newIndex) #适用于series与dataframe
obj.reindex(index=newIndex, columns=newcolumns) #dataframe需对行索引列索引都重新索引时
obj.reindex(index=newindex, columns=newcolumns, fill_value=100) #指定填充值,不指定时填充NaN
obj.reindex(index=newindex, columns=newcolumns, fill_value=100, method='ffill') #指定填充方法ffill/pad(前向填充),bfill/backfill(后向填充)
obj=obj.drop(index, axis=0)
obj=obj.drop([col1, col2, ...], axis=1)
axis默认为0,删除列数据时指定axis为1
series
obj = pd.Series(range(5), index=list('abcde'))
取单数 obj[2], obj['c']
切片取数 obj[2:5], obj['a':'c']
不连续取数 obj[1,3], obj['a','c','d']
过滤 obj[obj>2],
修改 obj[3]=0,
注:series切片不用于python数据结构的切片,series的切片包含末端,即python:[start, end), series:[start, end]
dataframe
obj = pd.DataFrame(np.arange(15).reshape((3,5)),
index = ['one', 'two', 'three'],
columns = list('abcde') )
取单列 obj.loc[:, 'c'], obj.iloc[:, 2], obj.xs('c', axis=1), obj['c'],
取单行 obj.loc['one'], obj.iloc[1], obj.xs('one', axis=0),
取连续行 obj.loc['one':'three'], obj.iloc[1:3], obj[:2],
取连续列 obj.loc[:, 'b':'d'], obj.iloc[:, 2:4],
取不连续行 obj.loc[['one','three']] obj.iloc[[0,2]],
取不连续列 obj.loc[:, ['b', 'e']] obj.iloc[:, [1,4]],
取单行单列 obj.loc['two', 'd'] obj.iloc[2, 4]
取连续行列 obj.loc['one':'three', 'b':'d'] obj.iloc[:2, 2:4]
取不连续行列 obj.loc[['one','three'], ['b':'d']] obj.iloc[[0,2], [1,4]]
根据列值过滤行 obj.loc[obj['c']%2==0, :]
******此处吐个槽,这个切片方法一会儿只能取单列,一会儿只能取连续行,一会儿包含终止项,一会儿不包含,我人都傻了...
******loc/iloc方法接收两个参数,第一个是行,第二个是列,都可切片,也都可指定索引,列参数可以不写,默认取所有列数据
******下面总结下这个花哨的切片!
dataframe有两种索引,行索引/列索引。每种索引包含两类用法,索引名称(对应df.loc)/索引下标对应(df.iloc)
① df[columnName] 取单列数据,只能用列名,不能使用列下标,不能用于取单行
② df[lineName1: lineName2] 取连续行数据,使用行名时,包含末尾项,即[start,end]
③ df[lineIndex1: lineIndex2] 取连续行数据,使用行下标时,不包含末尾项 ,即[start,end)
④ df.loc['line2':'line4'] 取连续行数据,使用行名时,包含末尾项,即[start,end]
⑤ df.iloc[2:4] 取连续行数据,使用行下标时,不包含末尾项 ,即[start,end)
⑥ df.loc[:, columnName1:columnName2] 取连续列,使用列名时,包含末尾项,即[start,end]
⑦ df.iloc[:, columnIndex1:columnIndex2] 取连续列,使用列下标时,不包含末尾项,即[start,end)
⑧ df.loc[[lineName1, ...], [columnName1, ...]] 使用行名/列名取不连续行列
⑨ df.iloc[[lineIndex1, ...], [columnIndex1, ...]] 使用行下标/列下标取不连续行列
以前用的时候总觉得奇奇怪怪的,花了一下午时间一个一个尝试终于捋顺了,欧耶! (〃 ̄︶ ̄) 人 ( ̄︶ ̄〃)
DataFrame直接切片,即df[args],可用于指定列名取单列数据,可用于指定行名/行下标取连续多行数据
取单行数据不可直接切片,需使用loc/iloc方法
DataFrame.loc(line, column) 用于按索引名称取行/列数据,此时,首尾项都会被取出
参数line指定行索引名称,参数2指定列索引名称(可省略,默认选取所有列)。
DataFrame.iloc(line, column) 用于按索引下标取行/列数据,此时,尾项数据不会被取出
参数line指定行索引下标,参数2指定列索引下标(可省略,默认选取所有列)。
‘捌’ python做数据分析主要干哪些事情
第一、检查数据表
Python中使用shape函数来查看数据表的维度,也就是行数以及列数。你可以使用info函数来查看数据表的整体信息,使用dtype函数来返回数据格式;lsnull是Python中检验空值的函数,可以对整个数据表进行检查,也可以单独对某一行进行空值检查,返回的结构是逻辑值,包含空值返回true,不包含则返回false。
第二、数据清洗
Python可以进行数据清洗,Python中处理空值的方法比较灵活,可以使用Dropna函数用来删除数据表中包含空值的数据,也可以使用fillna函数对空值进行填充;Python中dtype是查看数据格式的函数,与之对应的是astype函数,用来更改数据格式,Rename是更改列名称的函数,drop_plicates函数删除重复值,replace函数实现数据替换。
第三、数据提取
进行数据提取时,主要使用三个函数:loc、iloc以及ix。Loc函数按标签进行提取,iloc按位置进行提取,ix可以同时按照标签和位置进行提取。除了按标签和位置提取数据之外,还可以按照具体的条件进行提取,比如使用loc和isin两个函数配合使用。
第四、数据筛选
Python数据分析还可以进行数据筛选,Python中使用loc函数配合筛选条件来完成筛选功能,配合sum和count函数还能实现Excel中sumif和countif函数的功能。使用的主要函数是groupby和pivot_table;groupby是进行分类汇总的函数,使用方法比较简单,groupby按列名称出现的顺序进行分组。
‘玖’ Panadas 中利用DataFrame对象的.loc[,]、.iloc[,]方法抽取数据
pandas的DataFrame对象,本质上是 二维矩阵 ,跟常规二维矩阵的差别在于前者额外指定了每一行和每一列的 名称 。这样内部数据抽取既可以用“ 行列名称(对应.loc[]方法) ”,也可以用“矩阵下标( 对应.iloc[]方法 )”两种方式进行。
下面具体说明:
(以下程序均在Jupyter notebook中进行,部分语句的print()函数省略)
首先生成一个DataFrame对象:
DataFrame对象生成时除了必须指定data参数外,用户还可以指定两个参数columns(列名)和index(行名,注意这里的index不仅可以是数字,也可以是用户指定的任何数据类型,如字母), 如果不指定,则行列名默认都采用0、1、2…… 。
下图说明了前面的情况:
.loc[行标签名/[行标签名list],列标签名/[列标签名list]],即有两个输入参数,第一个指定行名,第二个指定列名。当只有一个参数时,默认是行名(即抽取整行),所有列都选中。
.loc[行位置/[行位置list],列位置/[列位置list]],也有两个输入参数,第一个指定行位置,第二个指定列位置。当只有一个参数时,默认是行位置(即抽取整行),所有列都选中。
上述.loc[]和.iloc[]都只接收了1个参数“语文”或者“0”,因此默认都表示行信息,而列则全部被选中,即抽取'语文'这整一行数据。','表示将两个参数隔开(如果有两个参数的话),':'这里表示选择中所有列。当只有一个输入参数时,python默认','和':'既可写上也可省略。注意:参数['语文']或[0]中只有一个对象时(即只有一行),[]也可以省略,如果有多个对象(即多行)则必须加上[]。此外还需注意,加上[]表示抽取的结果无论是一个数据,一行数据,还是一列数据,他都是DataFrame对象;不加[]时,如果选中的是一行或者一列数据,则是Series对象,如果是一个单独的数据,则是该数据本身的类型。
例2和例1唯一的差别是,第一个参数指定了多行一起输出,此时必须用[]将各行名或者下标括起来,否则出错。后面的','和':'同例1,可省略。注意:原始数据的行顺序是:语文、数学、英语、政治,这里的提取顺序是['英语','语文','政治'],而输出也是'英语','语文','政治',可见输出顺序和参数指定顺序是一致的,而非按原始顺序输出。
例3依然是接受1个参数,列参数没有,后面的','和':'同例1,可省略。连续参数用‘start:end’的方式指定行范围。注意:这里不能用[]将其括起来,否则出错。此外用行列名连续取值时,比如['语文':'政治']会把'政治'所在行也取出来,而利用矩阵下标时,0:3只取0,1,2对应的三行,最后一行不会取出;但是如果行列标签名本身就是整数0,1,2……,而不是文字或者其他类型,那么在使用连续行列标签名取数据时,最后一行或者列是不会被取出的。
抽取整列的方式跟抽取整行在参数设置上完全一样。.loc[]和.iloc[]两个方法默认列为第二个参数, 因此抽取整列时,都必须带上':,'作为区分前面行参数的‘分隔符’,否则出错 。
同时抽取分部行和列的情况,就是把上述单独抽取行和列的方式合并起来用。抽取整个DataFrame对象则是.loc[:,:]或.iloc[:,:],虽然这么做没啥意义。
(1)DataFrame对象的.loc[,]和.iloc[,]方法用于抽取数据,.loc[,]用行列的标签名作为参数,.iloc[,]用二维矩阵元素的网格下标作为参数。
(2)两个方法都接受两个参数,第一个是“行标签”或者“矩阵行号”,第二个是“列标签”或者“矩阵列号”。
(3)两种方法当只指定一个输入参数时,都默是跟“行”相关,而“列”则全部被选中。如何行和列都需要指定时,中间用“逗号,”隔开,这非常重要,否则出错。
(4)当需要选中所有行的某几列时,行参数可以省略,列参数需要指定,此时列参数前面必须带上“,:”,形如.loc[:,列参数],.iloc[:,列参数]。
(5).loc[,]和.iloc[,]设置了一个还是两个输入参数,关键看有没有“,”将两个参数分开,且要区分逗号是一个参数的内部逗号,还有用于分隔行列参数的逗号。
(6)对于两个参数的概念区分,.loc['语文','数学']这表示输入了两个参数,行参数是‘语文’,列参数是‘数学’,对于上面的表格而言这是错的,因为没有叫‘数学’的列,应写为[['语文','数学']],即‘数学’也是行参数的一部分,['语文','数学']整体作为一个行参数,这里的逗号不是用以分隔行和列,仅仅是行list里面的逗号。[['语文','数学']]=[['语文','数学'],]=[['语文','数学'],:],都表示只有一个行参数,列全部选中。
‘拾’ python:pandas之DataFrame取行列(df.loc(),df.iloc())以及索引
1、pandas排序,并取前N列数据
2、取行、取列DataFrame.loc,DataFrame.iloc
-取行DataFrame.loc,DataFrame.iloc