如何实现大熊猫DataFrame数据选取,修改,切片

  介绍

这篇文章主要为大家展示了如何实现大熊猫DataFrame数据选取,修改,切片,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。

在刚开始使用熊猫DataFrame的时候,对于数据的选取,修改和切片经常困惑,这里总结了一些常用的操作。

熊猫主要提供了三种属性用来选取行/列数据:

属性名属性第九根据整数索引或者行标签选取数据iloc根据位置的整数索引选取数据loc根据行标签选取数据

先初始化一个DateFrame做例子

进口numpy np
  熊猫作为pd导入
  df=pd.DataFrame([[& # 39;雪# 39;& # 39;猴# 39;,22],[& # 39;泰瑞欧# 39;& # 39;猴# 39;,32],[& # 39;珊莎# 39;& # 39;f # 39;, 18], [& # 39; Arya& # 39; & # 39; f # 39;, 14]],列=[& # 39;名字# 39;& # 39;性别# 39;,& # 39;年龄# 39;])

df是这样的

:df.columns
  [42]:指数([& # 39;名字# 39;& # 39;性别# 39;,& # 39;年龄# 39;],dtype=& # 39;对象# 39;)

1。df (& # 39; column_name& # 39;], df (row_start_index, row_end_index)选取指定整列数据

df(& # 39;名字# 39;】   df(& # 39;性别# 39;】   df[[& # 39;名字# 39;& # 39;性别# 39;]]#选取多列,多列名字要放在列表里   df(0:) #第0行及之后的行,相当于df的全部数据,注意冒号是必须的   df(2): #第2行之前的数据(不含第2行)   df(0:1) #第0行   df[1:3] #第1行到第2行(不含第3行)   df(1:) #最后一行   df(3: 1) #倒数第3行到倒数第1行(不包含最后一行即倒数第1行,这里有点烦躁,因为从前数时从第0行开始,从后数就是1行开始,毕竟没有0)

2。地方,在知道列名字的情况下,df。loc(指数、列)选取指定行、列的数据

loc也提供了五种参数形式

inputexample(摘自官方文档)输出行标签df.loc['毒蛇# 39;]选取毒蛇那一行行标签数组df.loc[[的毒蛇# 39;,响尾蛇导弹# 39;]]选取行标签为毒蛇,响尾蛇导弹行标签切片df.loc[“眼镜蛇# 39;:“毒蛇# 39;,' max_speed& # 39;]选取从眼镜蛇到毒蛇行的max_speed列布尔值数组df。loc[[假,假,真]]-函数df.loc (df(“盾# 39;]比;6,[' max_speed& # 39;]]选取盾列大于6的那一行的max_speed数据

注意df.loc (df['一个# 39;]在10]这样的写法是可以正常选出一列大于10的数据

 # df。loc指数(column_name,选取指定行和列的数据
  df.loc[0, & # 39;名字# 39;]# & # 39;雪# 39;
  df。loc[0:2,[& # 39;名字# 39;& # 39;年龄# 39;]]#选取第0行到第2行,列名字和年龄列的数据,注意这里的行选取是包含下标的。
  df.loc[[2、3],[& # 39;名字# 39;& # 39;年龄# 39;]]#选取指定的第2行和第3行,姓名和年龄列的数据
  df.loc [df[& # 39;性别# 39;]==& # 39;猴# 39;,& # 39;名字# 39;]#选取性别列是M,名字列的数据
  df.loc [df[& # 39;性别# 39;]==& # 39;猴# 39;,[& # 39;名字# 39;& # 39;年龄# 39;]]#选取性别列是M,姓名和年龄列的数据

3。iloc,在列名特别长或者指数是时间序列等各种不方便输入的情况下,可以用iloc (i=指数),iloc完全用数字来定位iloc [row_index column_index]

iloc提供了五种参数形式

inputexampleoutput整数(行索引)df.iloc[5]选取第6行数据整数数组df.iloc[[1、3、5]]选取第2,4,6行数据整数切片df.iloc[1:3]选取2 ~ 4行数据(不包含第4行数据)布尔值数组df.iloc[[真,假,真]选取第1、3行数据函数df.iloc [(df['一个# 39;]祝辞;10).tolist()]选取& # 39;一个# 39;这列大于10的那一行数据

注意:iloc接受有返回值的函数作为参数,但要保证函数返回的是整数/整数列表中,布尔值/布尔列表

如果直接运行df.iloc (df['一个# 39;]在10]

则会报错NotImplementedError: iLocation基于布尔检索> df。iloc 0(0,0) #第行第0列的数据,& # 39;雪# 39;   df。iloc[1, 2] 1 #第行第2列的数据,32   df。iloc[[1,3], 0:2] #第1行和第3行,从第0列到第2列(不包含第2列)的数据   df。iloc[1:3,[1, 2] #第1行到第3行(不包含第3行),第1列和第2列的数据

4。第九,第九很强大,loc和iloc的功能都能做第九到[row_index column_index]

第九虽然强大,然而已经不再被推荐,因为在最新版的熊猫里面,第九已经成为弃用。(https://github.com/pandas-dev/pandas/issues/14218)

大概是因为可以混合标签和位置导致了很多用户问题和bug。

所以,用标签就用代码行时,用位置就用iloc。

如何实现大熊猫DataFrame数据选取,修改,切片