python重置索引函数,python dataframe重新索引
index在python中的用法
如下:
创新互联建站长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为靖边企业提供专业的网站设计、成都网站设计,靖边网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。
1、index函数:用于从列表中找出某个值第一个匹配项的索引位置。
2、index方法语法:list.index(x[, start[, end]])。
3、参数:x-- 查找的对象。start-- 可选,查找的起始位置。end-- 可选,查找的结束位置。
4、返回值:该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。
5、实例:
代码:str1 = "this is string example....wow!!!";str2 = "exam"。
index函数为print(str1.index(str2))。
python中index函数怎么用?
Python中index方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find方法一样,只不过如果str不在string中会报一个异常。
index函数一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错。
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之Series与DataFrame
19.1安装Anaconda
Anaconda是Python的一个开源发行版本,它预装了丰富的第三方库,而且主要面向科学计算和数据分析,使用起来要比原版的Python更省时省力。
Anaconda官方下载网址为:。下载和安装的方法很简单,若有问题可以在网上搜索相关内容学习解决。
安装Anaconda之后,就会发现在Anaconda目录下同时安装了Jupyter Notebook、Spyder等工具,我们接下来主要使用Spyder进行开发。关于Spyder的使用方法非常简单,大家也可以去网上搜索学习。
虽然Anaconda已经预装了很多常用的包,但有时我们也需要自己安装一些包。可以在开始菜单中选择“Anaconda Anaconda Prompt”命令,在命令行输入conda install ( 代表包名)即可安装,也可以输入pip install 。
19.2数据分析包Pandas
Pandas是Python的一个数据分析包,Anaconda安装时已经附带安装了Pandas包。
Pandas数据结构有三种:Series(一维数组)、DataFrame(二维数组)和Panel(三维数组),其中最常用的是前两种数据结构。
19.2.1 Series
Series(序列)用于存储一行或一列数据,以及与之相关的索引的集合。
语法格式如下:
Series([数据1,数据2,......], index=[索引1,索引2,......])
例:
from pandas import Series
s=Series(['张三','李四','王五'],index=[1,2,3])
print(s)
输出结果如下:
1 张三
2 李四
3 王五
dtype: object
上面建立序列时指定了索引,若不指定,则默认的索引值从0开始。如下:
s=Series(['张三','李四','王五'])
输出结果为:
0 张三
1 李四
2 王五
dtype: object
索引值也可以为字符串。如下:
from pandas import Series
s=Series(['张三','李四','王五'],index=['A','B','C'])
print(s)
输出结果为:
A 张三
B 李四
C 王五
dtype: object
1、访问序列
(1)可以通过索引访问序列,如:
from pandas import Series
s=Series(['张三','李四','王五'])
print(s)
print(s[0])
print(s[1:])
运行结果如下:
0 张三
1 李四
2 王五
dtype: object #print(s)输出
张三 #print(s[0])输出
1 李四
2 王五
dtype: object #print(s[1:])输出
(2)通过值获取索引值
from pandas import Series
s=Series(['张三','李四','王五'],index=['A','B','C'])
print(s.index[s.values=='李四'])
运行结果:
Index(['B'], dtype='object')
(3)判断值是否存在
from pandas import Series
s=Series(['张三','李四','王五'],index=['A','B','C'])
f='李四' in s.values
print(f)
运行结果:
True
(4)定位获取
from pandas import Series
s=Series(['张三','李四','王五','孙六'],index=['A','B','C','D'])
print(s[[0,2,1]])
运行结果:
A 张三
C 王五
B 李四
dtype: object
2、修改序列
(1)追加序列,如:
from pandas import Series
s=Series(['张三','李四','王五'],index=['A','B','C'])
s1=Series(['孙六'],index=['D'])
s=s.append(s1)
print(s)
运行结果:
A 张三
B 李四
C 王五
D 孙六
dtype: object
(2)修改序列的值
from pandas import Series
s=Series(['张三','李四','王五','孙六'],index=['A','B','C','D'])
s[1]='李飞'
print(s)
运行结果:
A 张三
B 李飞
C 王五
D 孙六
dtype: object
不知道索引,仅知道要修改的值,也可通过值查找到索引后,再修改序列的值。如:
s[s.index[s.values=='李四']]='李飞'
这样也可以将“李四”修改为“李飞。
(3)修改索引
from pandas import Series
s=Series(['张三','李四','王五','孙六'],index=['A','B','C','D'])
s.index=[0,1,2,3]
print(s)
运行结果:
0 张三
1 李四
2 王五
3 孙六
dtype: object
(4)删除元素
from pandas import Series
s=Series(['张三','李四','王五','孙六'],index=['A','B','C','D'])
s=s.drop('A')
print(s)
运行结果:
B 李四
C 王五
D 孙六
dtype: object
(5)重新排序
可以按照索引排序,使用sort_index(ascending=True)方法对index进行排序操作。
from pandas import Series
s=Series(['张三','李四','王五','孙六'],index=['A','B','C','D'])
s=s.sort_index(ascending=False) # ascending=False表示按降序排列
print(s)
运行结果:
D 孙六
C 王五
B 李四
A 张三
dtype: object
(6)重置索引
重置索引可以使用reindex()。如果index列表中的元素多于序列的值,可用fill_value=0这样的语句填充。
s=s.reindex(['D','C','B','A'])
如果index列表中的元素多于序列的值,可用fill_value=0这样的语句填充。
s=s.reindex(['D','C','B','A'], fill_value=0)
19.2.2 DataFrame
DataFrame(数据框架)用于存储多行和多列的数据集合。它是Series的容器,类似于Excel中二维表格。
定义一个DataFrame的语法格式如下:
df=DataFrame({列名1 : 序列1,列名2 : 序列2,.......列名n : 序列n}, index=序列 )
例如,有如下二维表:
姓名
性别
年龄
张三
男
18
李四
女
19
王五
男
17
保存到DataFrame中可以用如下方法:
from pandas import Series
from pandas import DataFrame
name=Series(['张三','李四','王五'])
sex=Series(['男','女','男'])
age=Series([18,19,17])
df=DataFrame({'姓名':name,'性别':sex,'年龄':age})
print(df)
运行结果:
姓名 性别 年龄
0 张三 男 18
1 李四 女 19
2 王五 男 17
从上例可以看出,虽然我们省缺了索引,但系统自动添加了从0开始的索引值。
19.3 DataFrame的基本操作
1、访问方式
(1)获取行
print(df[1:2]) # 获取第1行的值
输出结果:
姓名 性别 年龄
1 李四 女 19
print(df[1:3]) #获取第1行到第2行的值
输出结果:
姓名 性别 年龄
1 李四 女 19
2 王五 男 17
(2)获取列
print(df['姓名']) #获取“姓名”列的值
输出结果:
0 张三
1 李四
2 王五
Name: 姓名, dtype: object
另一种方法:
print(df[df.columns[0:1]]) #先按照索引号获取列名,再按照列名读取
输出结果和上面的方法完全一致。
还有一种情况,是获取唯一值,即将列内的重复值中多余的删除,仅留下互不相同的值。所用的到方法是unique()。
sex1=Series(df['性别'].unique())
print(sex1)
输出结果:
0 男
1 女
dtype: object
(3)获取指定位置的值
print(df.at[1,'姓名']) # 格式为变量名.at[行号,列名]
输出结果:
李四
(4)获取块的值
print(df.iloc[0:2,1:3]) # 格式为变量名.iloc[行号1:行号2, 列号1:列号2]
输出结果:
性别 年龄
0 男 18
1 女 19
print(df.iloc[:,1:2]) #获取“性别”列的值
运行结果:
性别
0 男
1 女
2 男
2、修改、删除、增加行和列
(1)修改列名
print(df.columns)
df.columns=['name','sex','age']
print(df.columns)
输出结果:
Index(['姓名', '性别', '年龄'], dtype='object')
Index(['name', 'sex', 'age'], dtype='object')
可见,列名已经由“姓名、性别、年龄”修改为“age、sex、age”了。但这种修改必须把全部列名都一一列举,不能有遗漏,否则就会出错。如:
df.columns=['name','sex']
此时会报错:ValueError: Length mismatch: Expected axis has 3 elements, new values have 2 elements。
(2)修改行索引
df.index=[1,2,3]
(3)删除行
df.drop(1,axis=0) # axis=0表示行轴,也可以省略
(4)删除列
df.drop(‘性别’,axis=1) # axis=0表示列轴
也可以使用另一种方法:
del df['性别']
(5)增加列
df['电话']=['1111111','2222222','3333333']
print(df)
运行结果:
姓名 性别 年龄 电话
0 张三 男 18 1111111
1 李四 女 19 2222222
2 王五 男 17 3333333
(6)增加行
df.loc[len(df)]=['孙六','男','20']
(7)追加
from pandas import Series
from pandas import DataFrame
name=Series(['张三','李四','王五'])
sex=Series(['男','女','男'])
age=Series([18,19,17])
df=DataFrame({'姓名':name,'性别':sex,'年龄':age}) # 建立DataFrame,变量名为df
name1=Series(['孙六','候七'])
sex1=Series(['男','女'])
age1=Series([19,17])
df1=DataFrame({'姓名':name1,'性别':sex1,'年龄':age1})
# 建立DataFrame,变量名为df1
df=df.append(df1,ignore_index=True)
# 将对df1追加到df后面,参数ignore_index=True表示重新索引
print(df)
运行结果:
姓名 性别 年龄
0 张三 男 18
1 李四 女 19
2 王五 男 17
3 孙六 男 19
4 候七 女 17
名称栏目:python重置索引函数,python dataframe重新索引
网站路径:http://pwwzsj.com/article/heiodo.html