㈠ python 数据处理(二十四)—— 索引和选择
如果你想获取 'A' 列的第 0 和第 2 个元素,你可以这样做:
这也可以用 .iloc 获取,通过使用位置索引来选择内容
可以使用 .get_indexer 获取多个索引:
警告 :
对于包含一个或多个缺失标签的列表,使用 .loc 或 [] 将不再重新索引,而是使用 .reindex
在以前的版本中,只要索引列表中存在至少一个有效标签,就可以使用 .loc[list-of-labels]
但是现在,只要索引列表中存在缺失的标签将引发 KeyError 。推荐的替代方法是使用 .reindex() 。
例如
索引列表的标签都存在
先前的版本
但是,现在
索引标签列表中包含不存在的标签,使用 reindex
另外,如果你只想选择有效的键,可以使用下面的方法,同时保留了数据的 dtype
对于 .reindex() ,如果有重复的索引将会引发异常
通常,您可以将所需的标签与当前轴做交集,然后重新索引
但是,如果你的索引结果包含重复标签,还是会引发异常
使用 sample() 方法可以从 Series 或 DataFrame 中随机选择行或列。
该方法默认会对行进行采样,并接受一个特定的行数、列数,或数据子集。
默认情况下, sample 每行最多返回一次,但也可以使用 replace 参数进行替换采样
默认情况下,每一行被选中的概率相等,但是如果你想让每一行有不同的概率,你可以为 sample 函数的 weights 参数设置抽样权值
这些权重可以是一个列表、一个 NumPy 数组或一个 Series ,但它们的长度必须与你要抽样的对象相同。
缺失的值将被视为权重为零,并且不允许使用 inf 值。如果权重之和不等于 1 ,则将所有权重除以权重之和,将其重新归一化。例如
当应用于 DataFrame 时,您可以通过简单地将列名作为字符串传递给 weights 作为采样权重(前提是您要采样的是行而不是列)。
sample 还允许用户使用 axis 参数对列进行抽样。
最后,我们还可以使用 random_state 参数为 sample 的随机数生成器设置一个种子,它将接受一个整数(作为种子)或一个 NumPy RandomState 对象
当为该轴设置一个不存在的键时, .loc/[] 操作可以执行放大
在 Series 的情况下,这实际上是一个追加操作
可以通过 .loc 在任一轴上放大 DataFrame
这就像 DataFrame 的 append 操作
由于用 [] 做索引必须处理很多情况(单标签访问、分片、布尔索引等),所以需要一些开销来搞清楚你的意图
如果你只想访问一个标量值,最快的方法是使用 at 和 iat 方法,这两个方法在所有的数据结构上都实现了
与 loc 类似, at 提供了基于标签的标量查找,而 iat 提供了基于整数的查找,与 iloc 类似
同时,你也可以根据这些索引进行设置值
如果索引标签不存在,会放大数据
另一种常见的操作是使用布尔向量来过滤数据。运算符包括:
|(or) 、 &(and) 、 ~ (not)
这些必须用括号来分组,因为默认情况下, Python 会将 df['A'] > 2 & df['B'] < 3 这样的表达式评估为 df['A'] > (2 & df['B']) < 3 ,而理想的执行顺序是 (df['A'] > 2) & (df['B'] < 3)
使用一个布尔向量来索引一个 Series ,其工作原理和 NumPy ndarray 一样。
您可以使用一个与 DataFrame 的索引长度相同的布尔向量从 DataFrame 中选择行
列表推导式和 Series 的 map 函数可用于产生更复杂的标准
我们可以使用布尔向量结合其他索引表达式,在多个轴上索引
iloc 支持两种布尔索引。如果索引器是一个布尔值 Series ,就会引发异常。
例如,在下面的例子中, df.iloc[s.values, 1] 是正确的。但是 df.iloc[s,1] 会引发 ValueError 。
㈡ python:pandas之DataFrame取行列(df.loc(),df.iloc())以及索引
1、pandas排序,并取前N列数据
2、取行、取列DataFrame.loc,DataFrame.iloc
-取行DataFrame.loc,DataFrame.iloc
㈢ 如何用Python建立索引
importre
patt=re.compile("w+")
defmakeIndex(filename):
index={}
withopen(filename)ashandle:
fori,lninenumerate(handle):
forwordinpatt.findall(ln):
index.setdefault(word,[]).append(i+1)
returnindex
defprintIndex(index):
forword,lstinindex.items():
print"%s:%s"%(
word,",".join(map(str,lst))
)
defindexQuery(index,*args):
found=None
forwordinargs:
got=index.get(word,[])
ifnotgot:
returnNone
ifnotfound:
found=set(got)
else:
found&=set(got)
ifnotfound:
returnNone
returnlist(found)
index=makeIndex("qa.py")
printIndex(index)
printindexQuery(index,"in","enumerate")
㈣ 怎么把列表里的内容按索引写入不同的文件
1.当列表之中的元素都是字符串类型或者是数字类型的时候,就可以使用open()函数在当前python文件内创建出一个文本文件对象,再调用writelines()方法将列表给写入到该文件之中。那么这个时候列表内元素实际上都会连接起来变成一行写入,示例如下:
l=["A","B","C","D"]
f=open("k.txt","w")
f.writelines(l)
f.close()
2.另外一种情况就是将列表转为字符串类型再写入到文件之中,而列表转为字符串的话实际上是将整个列表结构及其值都加上闹帆引号来表示为字符串类型。也就是写入文件后可看到数据还是放在方括号内的,并且结构都没有发生变化,代码示例如下:
l=["A","B","C","D",1,2,3]
f=open("k.txt","w")
f.write(str(l))
f.close()
3.那么要将列表写入到Excel文件或者是Csv文件这种表格类型的文件中时,就需要用到第三模块以及for循环了。因为需要旁弯如使用此模块来将表格文件打开或者创建,而for循环则是为了将列表数据写入到表格文件的第几行几列之中,详细代码示例如下所示:
def data_write(file_path, datas):
f = xlwt.Workbook()
sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True)
i = 0
for data in datas:
for j in range(len(data)):
sheet1.write(i,j,data[j])
i = i + 1
f.save(file_path)
以上就是关于“Python如何把列表写入文件?Python将列表写入文件如何做”的全部内容了。运启
㈤ pandas将某一行设置为列索引(python)
b[b.['state']=='ohio'].index
In [36]: list(df['state']).index('ohio')
Out[36]: 0
In [37]: list(df['state']).index('nevada')
Out[37]: 1
访问某一列可以通过b['state']和b.state这两种方法进行,但是输出的pandas里面的Series这种数据类型,因此b['state'].index()返回Index([0,1], dtype=object)。
因为数据分析知某个值并不是非常重要,所以没有直接输出索引值的函数,可以通过query()函数,b.query('state == "obio"'),输出含有ohio的行自然也就知道索引。
(5)python按照行列索引填充扩展阅读:
索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。
在数据库关系图中,可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。
在数据库系统中建立索引主要有以下作用:
(1)快速取数据;
(2)保证数据记录的唯一性;
(3)实现表与表之间的参照完整性;
(4)在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。
㈥ Python 通用的序列操作
序列 (sequence)是Python最基本的一种数据结构。
序列中的每个元素都有编号,即其位置或索引,其中第一个元素的索引为0,第二个元素的索引为1,依此类推。Python的序列索引支持负数,-1表示序列的最后一个元素,这是Python不同其他很多种语言不同的地方。
Python内置了多种序列,列表、元组、字符串是其中最常用的三种,本文为你描述各种序列的通用操作。
索引从0开始,索引号为0的元素为1,greeting的索引号为0的元素为'H'。
你可能注意到'Hello'和'H'都用单引号包围,这是Python不同于其他语言的另一个地方。Python并没有专门用于表示字符的数据类型,因此一个字符就是一个只包含一个元素的字符串。
Python的序列索引支持负数,-1表示倒数第一个元素。
切片 (slicing)操作用于访问序列特定 范围 内的元素。在一对方括号内使用两个索引,并用冒号隔开:
注意到,返回的序列并未包含愿序列的第6个元素7,就相当于数学集合中的 左闭右开区间 操作。
换言之,你提供两个索引来指定切片的边界,其中第一个索引指定的元素包含在切片内,但第二个索引指定的元素不包含在切片内。
保留冒号,省略羡运备第一个索引,表示从序列起始位置开始切片;省略第二个索引,表示切片到序列末尾,包含最后一个元素:
这个操作的效果是:在指定的区间内间隔取元素,语法格式为:
例如:
步长为正数时,它从起点移到终点,而步长为负数时,它从终点移到起点。
可以使用加法运算(+运算符)拼接两个序列:
从错误消息兄毁可知,不能拼接列表和字符串,虽然它们都是序列。一般而言,不悄配能拼接不同类型的序列。
将序列与数x 相乘时,将重复这个序列x 次来创建一个新序列:
初始化一个长度为10的空列表:
成员资格检查判定一个元素是否存在于集合中,如存在返回True,否则返回False,实际上是一个布尔表达式。
语法:
例如:
内置函数 len 返回序列包含的元素个数,而 min 和 max 分别返回序列中最小和最大的元素。
Python通用的序列操作有:索引、切片、乘法、成员资格检查、长度、最小值和最大值。
㈦ Python用数列索引数列的问题
首先:python中的列表是不能这样索引的,报的错翻译过来是:列表的索引要么是切片要么是数字而不能是一个列表。
1 数字:如 y[1], y[3], y[-1](取倒数第一个元素)
2 切片:如y[1:3](取第1到第3个元素),y[:3](取前三个元素),y[3:](取第三个元素之后的所有元素)
其次,要实现你所需的功能,有两种方案:
1 使用循环来实现
x=[0,1,2,3,4,5,6]
y=[11,22,33,44,55,66,77]
random.shuffle(x)
y2=[]#存储结果
foriinrange(len(x)):
y2.append(y[x[i]])
2 使用numpy实现,numpy是python中常用的数据分析库,需要单独安装
importnumpyasnp
importrandom
x=[0,1,2,3,4,5,6]
y=np.array([11,22,33,44,55,66,77])
random.shuffle(x)
y[x]
㈧ Python pandas用法
在Python中,pandas是基于NumPy数组构建的,使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的,而NumPy更适合处理统一的数值数组数据。
使用下面格式约定,引入pandas包:
pandas有两个主要数据结构:Series和DataFrame。
Series是一种类似于一维数组的对象,它由 一组数据 (各种NumPy数据类型)以及一组与之相关的 数据标签(即索引) 组成,即index和values两部分,可以通过索引的方式选取Series中的单个或一组值。
pd.Series(list,index=[ ]) ,第二个参数是Series中数据的索引,可以省略。
Series类型索引、切片、运算的操作类似于ndarray,同样的类似Python字典类型的操作,包括保留字in操作、使用.get()方法。
Series和ndarray之间的主要区别在于Series之间的操作会根据索引自动对齐数据。
DataFrame是一个表格型的数据类型,每列值类型可以不同,是最常用的pandas对象。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。
pd.DataFrame(data,columns = [ ],index = [ ]) :columns和index为指定的列、行索引,并按照顺序排列。
如果创建时指定了columns和index索引,则按照索引顺序排列,并且如果传入的列在数据中找不到,就会在结果中产生缺失值:
数据索引 :Series和DataFrame的索引是Index类型,Index对象是不可修改,可通过索引值或索引标签获取目标数据,也可通过索引使序列或数据框的计算、操作实现自动化对齐。索引类型index的常用方法:
重新索引 :能够改变、重排Series和DataFrame索引,会创建一个新对象,如果某个索引值当前不存在,就引入缺失值。
df.reindex(index, columns ,fill_value, method, limit, ) :index/columns为新的行列自定义索引;fill_value为用于填充缺失位置的值;method为填充方法,ffill当前值向前填充,bfill向后填充;limit为最大填充量; 默认True,生成新的对象,False时,新旧相等不复制。
删除指定索引 :默认返回的是一个新对象。
.drop() :能够删除Series和DataFrame指定行或列索引。
删除一行或者一列时,用单引号指定索引,删除多行时用列表指定索引。
如果删除的是列索引,需要增加axis=1或axis='columns'作为参数。
增加inplace=True作为参数,可以就地修改对象,不会返回新的对象。
在pandas中,有多个方法可以选取和重新组合数据。对于DataFrame,表5-4进行了总结
适用于Series和DataFrame的基本统计分析函数 :传入axis='columns'或axis=1将会按行进行运算。
.describe() :针对各列的多个统计汇总,用统计学指标快速描述数据的概要。
.sum() :计算各列数据的和
.count() :非NaN值的数量
.mean( )/.median() :计算数据的算术平均值、算术中位数
.var()/.std() :计算数据的方差、标准差
.corr()/.cov() :计算相关系数矩阵、协方差矩阵,是通过参数对计算出来的。Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。DataFrame的corr和cov方法将以DataFrame的形式分别返回完整的相关系数或协方差矩阵。
.corrwith() :利用DataFrame的corrwith方法,可以计算其列或行跟另一个Series或DataFrame之间的相关系数。传入一个Series将会返回一个相关系数值Series(针对各列进行计算),传入一个DataFrame则会计算按列名配对的相关系数。
.min()/.max() :计算数据的最小值、最大值
.diff() :计算一阶差分,对时间序列很有效
.mode() :计算众数,返回频数最高的那(几)个
.mean() :计算均值
.quantile() :计算分位数(0到1)
.isin() :用于判断矢量化集合的成员资格,可用于过滤Series中或DataFrame列中数据的子集
适用于Series的基本统计分析函数,DataFrame[列名]返回的是一个Series类型。
.unique() :返回一个Series中的唯一值组成的数组。
.value_counts() :计算一个Series中各值出现的频率。
.argmin()/.argmax() :计算数据最大值、最小值所在位置的索引位置(自动索引)
.idxmin()/.idxmax() :计算数据最大值、最小值所在位置的索引(自定义索引)
pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。下表对它们进行了总结,其中read_csv()、read_table()、to_csv()是用得最多的。
在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载、清理、转换以及重塑。
在许多数据分析工作中,缺失数据是经常发生的。对于数值数据,pandas使用浮点值NaN(np.nan)表示缺失数据,也可将缺失值表示为NA(Python内置的None值)。
替换值
.replace(old, new) :用新的数据替换老的数据,如果希望一次性替换多个值,old和new可以是列表。默认会返回一个新的对象,传入inplace=True可以对现有对象进行就地修改。
删除重复数据
利用函数或字典进行数据转换
df.head():查询数据的前五行
df.tail():查询数据的末尾5行
pandas.cut()
pandas.qcut() 基于分位数的离散化函数。基于秩或基于样本分位数将变量离散化为等大小桶。
pandas.date_range() 返回一个时间索引
df.apply() 沿相应轴应用函数
Series.value_counts() 返回不同数据的计数值
df.aggregate()
df.reset_index() 重新设置index,参数drop = True时会丢弃原来的索引,设置新的从0开始的索引。常与groupby()一起用
numpy.zeros()
㈨ python(pandas模块)
1.什么是pandas? numpy模块和pandas模块都是用于处理数据的模块。 numpy主要用于针对数组进行统计计算,处理数字数据比较方便。 pandas除了可以处理数字数据,还可...
㈩ python如何将列表作为列表的索引
1.
a=['a','b','c','d','e','f','g','h','i','j','k','l','m','n']
b=[1,4,3,6,10]
c=type(a)(map(lambdai:a[i],b))#这里没有判断b的元素作为a的索引的时候值太大溢出的异常
printc
>>>
['b','e','d','g','k']
>>>
------------------------------
2.
>>>importnumpyasnp
>>>b=np.array([2,3,4,5,6])
>>>a=np.array([0,2,4])
>>>b[a]
array([2,4,6])