pandas DataFrame的新增行列,修改、删除、筛选、判断元素以及转置操作
1)指定行索引和列索引标签
index 属性可以指定 DataFrame 结构中的索引数组, columns 属性可以指定包含列名称的行,
而使用 name 属性,通过对一个 DataFrame 实例进行 df 设置( df.index.name 和 df.columns.name)就可以为 DataFrame 结构指定行索引标签和列索引标签。
例如,对产品价格表指定行索引标签和列索引标签,其示例代码如下:
In [24]: df.index.name = 'id' In [25]: df.columns.name = 'item In [26]: df Out[26]: item product price id 0 电视机 2300.0 1 空调 1980.0 2 洗衣机 780.0 3 电脑 NaN
2) 添加一列元素
为 DataFrame 实例添加一列元素的方法就是指定 DataFrame 实例新列的名称,并为其赋值即可。例如,为产品价格增加一个折扣率列,其示例代码如下:
In [27]: df['discount']=[0.9,0.85,0.95,1] In [28]: df Out[28]: item product price discount id 0 电视机 2300.0 0.90 1 空调 1980.0 0.85 2 洗衣机 780.0 0.95 3 电脑 NaN 1.00
或者用 insert() 函数在指定位置添加一列元素。例如,在折扣率列后面,添加一列价格(“price”)乘以折扣率(“discount”)的实际价格(“Actual_price”)列,其示例代码如下:
In [29]: df.insert(3,'Actual_price',df['price']*df['discount']) In [30]: df Out[30]: item product price discount Actual_price id 0 电视机 2300.0 0.90 2070.0 1 空调 1980.0 0.85 1683.0 2 洗衣机 780.0 0.95 741.0 3 电脑 NaN 1.00 NaN
3) 添加一行元素
为 DataFrame 实例添加一行元素的方法就是使用 loc 属性为 DataFrame 实例新添加一行,并为此行赋值即可。例如,为产品价格增加一个手机产品的价格行,其示例代码如下:
In [31]: df.loc['add_row'] = ['手机',1900,1,1900] In [32]: df Out[32]: item product price discount Actual_price id 0 电视机 2300.0 0.90 2070.0 1 空调 1980.0 0.85 1683.0 2 洗衣机 780.0 0.95 741.0 3 电脑 NaN 1.00 NaN add_row 手机 1900.0 1.00 1900.0
4) 修改一行元素
修改 DataFrame 对象中的一行元素,只需要使用 loc 属性指定 DataFrame 实例中行索引,并为此行赋值即可。例如,修改产品价格中电脑一行的数据,其示例代码如下:
In [33]: df.loc[3] = ['电脑',4500,1,4500] In [34]: df Out[34]: item product price iscount Actual_price id 0 电视机 2300.0 0.90 2070.0 1 空调 1980.0 0.85 1683.0 2 洗衣机 780.0 0.95 741.0 3 电脑 4500.0 1.00 4500.0 add_row 手机 1900.0 1.00 1900.0
5) 修改一列元素或一个元素
修改 DataFrame 实例中的一列元素,只要指定 DataFrame 实例中列名称,将要更新的一列元素存放到数组中,然后将此数组赋值给这一列即可。
例如,修改产品价格中的价格为新价格 [3000,2300,560,5600],其示例代码如下:
In [35]: df['price']=[3000,2300,560,5600,1880] In [36]: df Out[36]: item product price discount Actual_price id 0 电视机 3000 0.90 2070.0 1 空调 2300 0.85 1683.0 2 洗衣机 560 0.95 741.0 3 电脑 5600 1.00 4500.0 add_row 手机 1880 1.00 1900.0
修改一个元素,只需要选择该元素,直接给其赋值即可。例如 df['discount'][1]=0.96。
6) 删除元素
6.1) 使用 del 命令删除一列元素
如果要删除一整列的所有数据,使用 del 命令。例如,删除产品价格中的实际价格列,其示例代码如下:
In [37]: del df['Actual_price'] In [38]: df Out[38]: item product price discou id 0 电视机 3000 0.90 1 空调 2300 0.85 2 洗衣机 560 0.95 3 电脑 5600 1.00 add_row 手机 1880 1.00
6.2) 使用 pop() 函数删除一列元素
pop() 函数可以将所选列从原数据块中删除,原数据块不再保留该列。例如,使用 pop() 函数删除折扣率列,其示例代码如下:
In [39]: df.pop('discount') Out[39]: id 0 0.90 1 0.85 2 0.95 3 1.00 add_row 1.00 Name: discount, dtype: float64
6.3) 使用 drop() 函数删除一列元素或删除一行元素
在 drop() 函数中有两个参数,一个参数是 axis,当参数 axis=1 时,则删除列元素;当 axis=0 时,则删除行元素。还有一个参数是 inplace,当 inplace 为 True 时,drop() 函数执行内部删除,不返回任何值,原数据发生改变;当 inplace 为 False 时,原数据不会发生改变,只是输出新变量删除。
例如,先添加 1 列折扣率列,然后再用 drop() 函数设置参数 axis=1 和 inplace=True 删除折扣率的列元素,其示例代码如下:
In [40]: df['discount']=0.94 In [41]: df.drop(['discount'],axis=1,inplace=True)
如果要删除一行,则设置 axis=0,并指定删除的行索引或行标签。例如,删除行标签为 add_row 的一行元素,其示例代码如下:
In [42]: df.drop(['add_row'],axis=0,inplace=True)
如果要删除多行,除了设置 axis=0 外,还要指定删除的行索引或行标签,例如,删除第 1 行和第 3 行元素,其示例代码如下:
In [43]: df.drop([0,2],axis=0,inplace=True)
7) 筛选元素
对于 DataFrame 对象,也可以通过指定条件来筛选元素。例如,筛选出产品价格中价格大于 2000 元的产品信息,其示例代码如下:
In [44]: df[df['price']>2000] Out[44]: item product price id 0 电视机 3000 1 空调 2300 3 电脑 5600
例如,筛选出产品价格中所有元素都小于 2000 元的产品信息,其示例代码如下:
In [45]: df[df<2000] Out[45]: item product price id 0 电视机 NaN 1 空调 NaN 2 洗衣机 560 3 电脑 NaN
返回的 DataFrame 对象中只包含满足条件的数字,各元素的位置保持不变,其他不符合条件的元素替换成 NaN。
8)判断元素是否存在
使用 isin() 函数可以判断给定的一列元素是否包含在 DataFrame 结构中,如果给定的元素包含在数据结构中,isin() 函数返回是 True,否则返回是 False。利用此函数可以筛选 DataFrame 列中的数据。
例如判断产品价格中是否存在“电脑”和 2300 这两个元素,并返回满足条件的元素,其示例代码如下:
In [46]: df[df.isin(['电脑',2300])] Out[46]: item product price id 0 NaN NaN 1 NaN 2300.0 2 NaN NaN 3 电脑 NaN
9) DataFrame 转置
DataFrame 数据结构类似于表格数据结构,在处理表格数据时,常常会用到转置操作,即将列变成行,行变成列。pandas 提供了一种简单的转置方法,就是通过调用T属性获得 DataFrame 对象的转置形式。
例如将产品价格数据结构进行转置操作,其示例代码如下:
In [47]: df.T Out[47]: id 0 1 2 3 item product 电视机 空调 洗衣机 电脑 price 3000 2300 560 5600