家居企业网站建设报价,网站展示怎么做,湖南网站设计外包服务,长沙优化网站推广set_index()函数
在Python Pandas的数据处理中#xff0c;set_index是一个非常常用的函数#xff0c;它的作用就是将DataFrame中的一列或多列作为新的索引。使用set_index函数#xff0c;可以快速地进行数据的筛选和重组。 如何在pandas中使用set_index( )与reset_index( )…set_index()函数
在Python Pandas的数据处理中set_index是一个非常常用的函数它的作用就是将DataFrame中的一列或多列作为新的索引。使用set_index函数可以快速地进行数据的筛选和重组。 如何在pandas中使用set_index( )与reset_index( )设置索引
函数解释 set_index(keys, dropFalse, appendTrue, inplaceTrue, verify_integrityTrue).rename(columns{‘id’: ‘index_id’})
keys需要设置为index的列名drop: 默认为True将列作为索引后是否删除原来的列inplace: 默认为False结果返回新的DataFrame实例如果设置为True那么结果返回原DataFrame实例并且索引修改原DataFrameappend: 默认为False如果为True则保留原有索引并追加新的索引verify_integrity: 默认为False如果为True在设置新的索引后会检查索引列是否有重复值如果有重复值则会报错
set_index的使用方法 set_index方法有两种使用方式
set_index()如果不指定参数那么默认会将第一列设置为索引set_index(keys)keys是要设置为索引的列名或列名的列表可以设置单个或多个索引
import pandas as pddf pd.DataFrame(data{姓名:[甲,乙,丙,丁],年龄:[12,23,34,43], 性别:[男,男,男,男]})
print(df) #构建表格格式
df2 df.set_index(姓名) #将姓名那一列作为索引
print(df2)
df3 df.set_index([姓名,性别]) #将姓名和性别作为索引
print(df3)结果 姓名 年龄 性别
0 甲 12 男
1 乙 23 男
2 丙 34 男
3 丁 43 男年龄 性别
姓名
甲 12 男
乙 23 男
丙 34 男
丁 43 男年龄
姓名 性别
甲 男 12
乙 男 23
丙 男 34
丁 男 43set_index的注意事项 在使用set_index时需要注意以下几个事项
设置索引之前需要先进行数据清洗和处理确保数据的准确性和完整性设置索引后需要使用unique()函数检查索引是否有重复值以避免后续数据操作时出现问题在合并DataFrame时需要先设置索引以提高数据合并的效率
数据子集的获取——应用iloc、loc、与ix完成数据子集的生成
Python数据处理工具 ——Pandas数据的预处理 通常在Pandas模块中实现数据框子集的获取可以使用iloc、loc和ix三种“方法”这三种方法既可以对数据行进行筛选也可以实现变量的挑选它们的语法可以表示成[rows_select,cols_select]。
iloc只能通过行号和列号进行数据的筛选读者可以将iloc中的“i”理解为“integer”即只能向[rows_select, cols_select]指定整数列表。该索引方式与数组的索引方式类似都是从0开始可以间隔取号对于切片仍然无法取到上限。
loc要比iloc灵活一些读者可以将loc中的“l”理解为“label”即可以向[rows_select, cols_select]指定具体的行标签行名称和列标签字段名。注意这里是标签不再是索引。而且还可以将rows_select指定为具体的筛选条件在iloc中是无法做到的。
ix是iloc和loc的混合读者可以将ix理解为“mix”该“方法”吸收了iloc和loc的优点使数据框子集的获取更加灵活。为了使读者理解这三种方法的使用和差异接下来通过具体的代码加以说明
# 数据子集的获取
# 构造数据集
import pandas as pd
df1 pd.DataFrame({name:[张三,李四,王二,丁一,李五],gender:[男,女,女,女,男],age:[23,26,22,25,27]}, columns [name,gender,age])
print(df1)
# 取出数据集的中间三行(即所有女性)并且返回姓名和年龄两列
print(df1.iloc[1:4,[0,2]] )
print(df1.loc[1:3, [name,age]])
print(df1.ix[1:3,[0,2]])注意ix方法已经过时了建议使用前两个 结果
name gender age
0 张三 男 23
1 李四 女 26
2 王二 女 22
3 丁一 女 25
4 李五 男 27name age
1 李四 26
2 王二 22
3 丁一 25name age
1 李四 26
2 王二 22
3 丁一 25AttributeError: DataFrame object has no attribute ix注意这时的数据集是以员工姓名作为行名称不再是之前的行号对于目标数据的返回同样可以使用iloc、loc和ix三种方法。对于iloc来说不管什么形式的数据集都可以使用始终表示行索引即取哪些行下标的观测loc就不能使用数值表示行标签了因为此时数据集的行标签是姓名所以需要写入中间三行对应的姓名通过ix方法既可以用行索引如代码所示表示也可以用行标签表示可根据读者的喜好选择。由于并没有对数据集的变量做任何限制所以cols_select用英文冒号表示代表取出数据集的所有变量。
很显然在实际的学习和工作中观测行的筛选很少是通过写入具体的行索引或行标签而是对某些列做条件筛选进而获得目标数据。例如在上面的df1数据集中如何返回所有男性的姓名和年龄代码如下
# 使用筛选条件取出所有男性的姓名和年龄
import pandas as pd
df1 pd.DataFrame({name:[张三,李四,王二,丁一,李五],gender:[男,女,女,女,男],age:[23,26,22,25,27]}, columns [name,gender,age])print(df1)
print(df1.loc[df1.gender 男,[name,age]])结果 name gender age
0 张三 男 23
1 李四 女 26
2 王二 女 22
3 丁一 女 25
4 李五 男 27name age
0 张三 23
4 李五 27如果是基于条件的记录筛选只能使用loc和ix两种方法。正如代码所示对iloc方法的那行代码做注释是因为iloc不允许使用条件筛选这行代码是无法运行成功的。对变量名的筛选loc必须指定具体的变量名而ix既可以使用变量名也可以使用字段的数值索引。 loc和iloc函数用法详解Python
综上所述ix方法几乎可以实现所有情况中数据子集的获取是iloc和loc两种方法的优点合成体而且对于行号与行名称一致的数据集来说如df1数据集名称索引的优先级在位置索引之前如本节第一段代码中的df1.ix[1:3,[0,2]]。
loc()函数
读者可以将loc中的“l”理解为“label”即可以向[rows_select, cols_select]指定具体的行标签行名称和列标签字段名。注意这里是标签不再是索引。
提取特定单个数据
import pandas as pddf pd.DataFrame(data{姓名:[甲,乙,丙,丁],年龄:[12,23,34,43], 性别:[男,男,男,男]})
df2 df.set_index(姓名) #将姓名那一列作为索引
print(df2)# 要查乙的性别根据索引‘乙’和列标签‘性别’来筛选
print(乙的性别是, df2.loc[乙,性别]) 结果 年龄 性别
姓名
甲 12 男
乙 23 男
丙 34 男
丁 43 男
乙的性别是 男提取多行数据
import pandas as pddf pd.DataFrame(data{姓名:[甲,乙,丙,丁],年龄:[12,23,34,43], 性别:[男,男,男,男]})
df2 df.set_index(姓名) #将姓名那一列作为索引
print(df2)print(df2.loc[[乙,丁],[年龄,性别]])结果 年龄 性别
姓名
甲 12 男
乙 23 男
丙 34 男
丁 43 男年龄 性别
姓名
乙 23 男
丁 43 男修改某一行某一列的值
Pandas库从入门到应用(二)–行列数据读写 逐行读取DataFrame数据以及修改对应数据
import pandas as pddf pd.DataFrame(data{姓名:[甲,乙,丙,丁],年龄:[12,23,34,43], 性别:[男,男,男,男]})
print(df)
df2 df.set_index(姓名) #将姓名那一列作为行标签
print(df2)
# 方法一
name_list df[姓名].tolist()
print(name_list)
for i in range(4):if name_list[i] in [甲, 丁]:print(df2.loc[name_list[i],性别])df2.loc[name_list[i],性别] 女else:pass
# # 方法2
# df2.loc[[甲, 丁],性别] 女
# print(df2)结果
甲 12 男
乙 23 男
丙 34 男
丁 43 男
[甲, 乙, 丙, 丁]
男
男