
io :字符串,文件的路径对象。
sheet_name :None、string、int、字符串列表或整数列表,默认为0。字符串用于工作表名称,整数用于零索引工作表位置,字符串列表或整数列表用于请求多个工作表,为None时获取所有工作表。
header :指定作为列名的行,默认0,即取第一行的值为列名。数据为列名行以下的数据;若数据不含列名,则设定 header = None。
names :默认为None,要使用的列名列表,如不包含标题行,应显示传递 header=None 。
index_col :指定列为索引列,默认None列(0索引)用作DataFrame的行标签。
usecols :int或list,默认为None。
squeeze :boolean,默认为False,如果解析的数据只包含一列,则返回一个Series。
dtype :列的类型名称或字典,默认为None。数据或列的数据类型。例如{'a':npfloat64,'b':npint32}使用对象保存存储在Excel中的数据而不解释dtype。如果指定了转换器,则它们将应用于dtype转换的INSTEAD。
skiprows :省略指定行数的数据,从第一行开始。
skipfooter :省略指定行数的数据,从尾部数的行开始。
dtype :字典类型{'列名1':数据类型,‘列名’:数据类型},设定指定列的数据类型。
注:《利用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列索引
选取/修改一行数据 dataframeloc['index']
选取/修改一列数据 dataframe['column'], dataframecolumn
objreindex(newIndex) #适用于series与dataframe
objreindex(index=newIndex, columns=newcolumns) #dataframe需对行索引列索引都重新索引时
objreindex(index=newindex, columns=newcolumns, fill_value=100) #指定填充值,不指定时填充NaN
objreindex(index=newindex, columns=newcolumns, fill_value=100, method='ffill') #指定填充方法ffill/pad(前向填充),bfill/backfill(后向填充)
obj=objdrop(index, axis=0)
obj=objdrop([col1, col2, ], axis=1)
axis默认为0,删除列数据时指定axis为1
series
obj = pdSeries(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 = pdDataFrame(nparange(15)reshape((3,5)),
index = ['one', 'two', 'three'],
columns = list('abcde') )
取单列 objloc[:, 'c'], objiloc[:, 2], objxs('c', axis=1), obj['c'],
取单行 objloc['one'], objiloc[1], objxs('one', axis=0),
取连续行 objloc['one':'three'], objiloc[1:3], obj[:2],
取连续列 objloc[:, 'b':'d'], objiloc[:, 2:4],
取不连续行 objloc[['one','three']] objiloc[[0,2]],
取不连续列 objloc[:, ['b', 'e']] objiloc[:, [1,4]],
取单行单列 objloc['two', 'd'] objiloc[2, 4]
取连续行列 objloc['one':'three', 'b':'d'] objiloc[:2, 2:4]
取不连续行列 objloc[['one','three'], ['b':'d']] objiloc[[0,2], [1,4]]
根据列值过滤行 objloc[obj['c']%2==0, :]
此处吐个槽,这个切片方法一会儿只能取单列,一会儿只能取连续行,一会儿包含终止项,一会儿不包含,我人都傻了
loc/iloc方法接收两个参数,第一个是行,第二个是列,都可切片,也都可指定索引,列参数可以不写,默认取所有列数据
下面总结下这个花哨的切片!
dataframe有两种索引,行索引/列索引。每种索引包含两类用法,索引名称(对应dfloc)/索引下标对应(dfiloc)
① df[columnName] 取单列数据,只能用列名,不能使用列下标,不能用于取单行
② df[lineName1: lineName2] 取连续行数据,使用行名时,包含末尾项,即[start,end]
③ df[lineIndex1: lineIndex2] 取连续行数据,使用行下标时,不包含末尾项 ,即[start,end)
④ dfloc['line2':'line4'] 取连续行数据,使用行名时,包含末尾项,即[start,end]
⑤ dfiloc[2:4] 取连续行数据,使用行下标时,不包含末尾项 ,即[start,end)
⑥ dfloc[:, columnName1:columnName2] 取连续列,使用列名时,包含末尾项,即[start,end]
⑦ dfiloc[:, columnIndex1:columnIndex2] 取连续列,使用列下标时,不包含末尾项,即[start,end)
⑧ dfloc[[lineName1, ], [columnName1, ]] 使用行名/列名取不连续行列
⑨ dfiloc[[lineIndex1, ], [columnIndex1, ]] 使用行下标/列下标取不连续行列
以前用的时候总觉得奇奇怪怪的,花了一下午时间一个一个尝试终于捋顺了,欧耶! (〃 ̄︶ ̄) 人 ( ̄︶ ̄〃)
DataFrame直接切片,即df[args],可用于指定列名取单列数据,可用于指定行名/行下标取连续多行数据
取单行数据不可直接切片,需使用loc/iloc方法
DataFrameloc(line, column) 用于按索引名称取行/列数据,此时,首尾项都会被取出
参数line指定行索引名称,参数2指定列索引名称(可省略,默认选取所有列)。
DataFrameiloc(line, column) 用于按索引下标取行/列数据,此时,尾项数据不会被取出
参数line指定行索引下标,参数2指定列索引下标(可省略,默认选取所有列)。
Pandas中有两种方式可以进行特定行列的选取,一种是在知道每一列的名称(label)的情况下(dfloc),一种是在只知道列的位置(integer-location)的情况下(dfiloc)。
可以看出,上述的冒号(:)意味着选取所有的行,所以只需在此处进行改动即可选取特定行(前开后闭)
同样在选取特定行的时候,依然存在基于label或者是基于integer-location的选择
选取行采用dfiloc方式,具体如下
除此之外,在采用非标签的方式选择的时候,可以通过输入布尔型变量进行筛选,比如 dfiloc[[True, False, True]] ,或者是 dfiloc[lambda x: xindex % 2 == 0]
完结撒花,反正知道了dfloc和dfiloc的差别之后自由组合就好了~
参考资料:
用pandas中的DataFrame时选取行或列:
import numpy as npimport pandas as pdfrom pandas import Sereis, DataFrameser = Series(nparange(3))data = DataFrame(nparange(16)reshape(4,4),index=list('abcd'),columns=list('wxyz'))data['w'] #选择表格中的'w'列,使用类字典属性,返回的是Series类型dataw #选择表格中的'w'列,使用点属性,返回的是Series类型data[['w']] #选择表格中的'w'列,返回的是DataFrame类型data[['w','z']] #选择表格中的'w'、'z'列data[0:2] #返回第1行到第2行的所有行,前闭后开,包括前不包括后data[1:2] #返回第2行,从0计,返回的是单行,通过有前后值的索引形式,
#如果采用data[1]则报错dataix[1:2] #返回第2行的第三种方法,返回的是DataFrame,跟data[1:2]同data['a':'b'] #利用index值进行切片,返回的是前闭后闭的DataFrame,
#即末端是包含的
datairow(0) #取data的第一行dataicol(0) #取data的第一列datahead() #返回data的前几行数据,默认为前五行,需要前十行则datahead(10)datatail() #返回data的后几行数据,默认为后五行,需要后十行则datatail(10)seriget_value(0) #选取ser序列中的第一个seriget_value(-1) #选取ser序列中的最后一个,这种轴索引包含索引器的series不能采用ser[-1]去获取最后一个,这会引起歧义。datailoc[-1] #选取DataFrame最后一行,返回的是Seriesdatailoc[-1:] #选取DataFrame最后一行,返回的是DataFramedataloc['a',['w','x']] #返回‘a’行'w'、'x'列,这种用于选取行索引列索引已知dataiat[1,1] #选取第二行第二列,用于已知行、列位置的选取。123456789101112131415161718192021222324252627282930313233343536373839404142
下面是简单的例子使用验证:
import pandas as pdfrom pandas import Series, DataFrame
import numpy as np
data = DataFrame(nparange(15)reshape(3,5),index=['one','two','three'],columns=['a','b','c','d','e'])
data
Out[7]:
a b c d eone 0 1 2 3 4two 5 6 7 8 9three 10 11 12 13 14#对列的 *** 作方法有如下几种dataicol(0) #选取第一列E:\Anaconda2\lib\site-packages\spyder\utils\ipython\start_kernelpy:1: FutureWarning: icol(i) is deprecated Please use iloc[:,i] # -- coding: utf-8 --Out[35]:
one 0two 5three 10Name: a, dtype: int32
data['a']
Out[8]:
one 0two 5three 10Name: a, dtype: int32
dataaOut[9]:
one 0two 5three 10Name: a, dtype: int32
data[['a']]
Out[10]:
aone 0two 5three 10dataix[:,[0,1,2]] #不知道列名只知道列的位置时Out[13]:
a b cone 0 1 2two 5 6 7three 10 11 12dataix[1,[0]] #选择第2行第1列的值Out[14]:
a 5Name: two, dtype: int32
dataix[[1,2],[0]] #选择第2,3行第1列的值Out[15]:
atwo 5three 10dataix[1:3,[0,2]] #选择第2-4行第1、3列的值Out[17]:
a ctwo 5 7three 10 12dataix[1:2,2:4] #选择第2-3行,3-5(不包括5)列的值Out[29]:
c dtwo 7 8dataix[dataa>5,3]
Out[30]:
three 13Name: d, dtype: int32
dataix[datab>6,3:4] #选择'b'列中大于6所在的行中的第4列,有点拗口Out[31]:
dthree 13dataix[dataa>5,2:4] #选择'a'列中大于5所在的行中的第3-5(不包括5)列Out[32]:
c dthree 12 13dataix[dataa>5,[2,2,2]] #选择'a'列中大于5所在的行中的第2列并重复3次Out[33]:
c c cthree 12 12 12#还可以行数或列数跟行名列名混着用dataix[1:3,['a','e']]
Out[24]:
a etwo 5 9three 10 14dataix['one':'two',[2,1]]
Out[25]:
c bone 2 1two 7 6dataix[['one','three'],[2,2]]
Out[26]:
c cone 2 2three 12 12dataix['one':'three',['a','c']]
Out[27]:
a cone 0 2two 5 7three 10 12dataix[['one','one'],['a','e','d','d','d']]
Out[28]:
a e d d done 0 4 3 3 3one 0 4 3 3 3#对行的 *** 作有如下几种:data[1:2] #(不知道列索引时)选择第2行,不能用data[1],可以用dataix[1]Out[18]:
a b c d etwo 5 6 7 8 9datairow(1) #选取第二行Out[36]:
a 5b 6c 7d 8e 9Name: two, dtype: int32
dataix[1] #选择第2行Out[20]:
a 5b 6c 7d 8e 9Name: two, dtype: int32
data['one':'two'] #当用已知的行索引时为前闭后闭区间,这点与切片稍有不同。Out[22]:
a b c d eone 0 1 2 3 4two 5 6 7 8 9dataix[1:3] #选择第2到4行,不包括第4行,即前闭后开区间。Out[23]:
a b c d etwo 5 6 7 8 9three 10 11 12 13 14dataix[-1:] #取DataFrame中最后一行,返回的是DataFrame类型,注意这种取法是有使用条件的,只有当行索引不是数字索引时才可以使用,否则可以选用`data[-1:]`--返回DataFrame类型或`datairow(-1)`--返回Series类型Out[11]:
a b c d ethree 10 11 12 13 14data[-1:] #跟上面一样,取DataFrame中最后一行,返回的是DataFrame类型Out[12]:
a b c d ethree 10 11 12 13 14dataix[-1] #取DataFrame中最后一行,返回的是Series类型,这个一样,行索引不能是数字时才可以使用Out[13]:
a 10b 11c 12d 13e 14Name: three, dtype: int32
datatail(1) #返回DataFrame中的最后一行datahead(1) #返回DataFrame中的第一行123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
最近处理数据时发现当pdread_csv()数据时有时候会有读取到未命名的列,且该列也用不到,一般是索引列被换掉后导致的,有强迫症的看着难受,这时候dataframedrop([columns,])是没法处理的,怎么办呢,
最笨的方法是直接给列索引重命名:
data6
Unnamed: 0 high symbol timedate 2016-11-01 0 33174 IF1611 18:10:4482016-11-01 1 33174 IF1611 06:01:0452016-11-01 2 33174 IF1611 07:46:2552016-11-01 3 33184 IF1611 09:30:0402016-11-01 4 33218 IF1611 09:31:040data6columns = list('abcd')
data6 a b c ddate 2016-11-01 0 33174 IF1611 18:10:4482016-11-01 1 33174 IF1611 06:01:0452016-11-01 2 33174 IF1611 07:46:2552016-11-01 3 33184 IF1611 09:30:0402016-11-01 4 33218 IF1611 09:31:04012345678910111213141516171819202122
重新命名后就可以用dataframedrop([columns])来删除了,当然不用我这样全部给列名替换掉了,可以只是改变未命名的那个列,然后删除。不过这个用起来总是觉得有点low,有没有更好的方法呢,有,可以不去删除,直接:
data7 = data6ix[:,1:]1
这样既不改变原有数据,也达到了删除神烦列,当然我这里时第0列删除,可以根据实际选择所在的列删除之,至于这个原理,可以看下前面的对列的 *** 作。
pandasread_excel()用于将Excel文件读取到DataFrame中
read_excel有几个常用参数:
参数io用于指定文件路径;
参数sheet_name指定表名,接受以str、int、list类型或者None,默认为0,即第一个表,如果传入None,则会读取所有的表格;
参数header指定表头,接受int、list类型或者None,默认为0,即表格第一行,如果传入None,则表示不适用源数据的表头;
参数names用于自定义表头,接受list类型,默认为None;
参数index_col用于指定索引列,接受int类型或者None,默认为None,即使用表格第一列作为索引列;
参数usecols用于指定读取的列,接受int、str、list类型或者None,如果为str,则表示Excel列字母和列范围的逗号分隔列表(例如“ A:E”或“ A,C,E:F”);
以上就是关于Pandas库read_excel()参数详解全部的内容,包括:Pandas库read_excel()参数详解、pandas索引取数、Python Pandas 依据标签或者位置选取特定行列 loc和iloc两种方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)