6. pandas基本数据类型---DataFrame行列基本操作

在pandas里,对于DataFrame的行和列,我们可以做如下几个基本操作

  1. 选择
  2. 添加
  3. 删除

为了演示的方便性,本文所有代码将以下面的数据为例

import pandas as pd

data = [
    {'语文': 90, '数学': 92},
    {'语文': 98, '数学': 87},
    {'语文': 87, '数学': 90},
    {'语文': 90, '数学': 98},
]

df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.index.name = '姓名'
df.columns.name = '科目'

print(df)

输出结果是

科目  数学  语文
姓名        
小明  92  90
小红  87  98
小刚  90  87
小丽  98  90

1. 对列的基本操作

1.1 列选择

选择某一列,只需要提供列名就可以了,其用法与字典获取value相似,现在,我要获取数学这一列,那么就可以这样操作

print(df['数学'])
print(df.数学)

这两种方法都是允许的,一般来说,推荐使用第一种,本教程为了讲解方便,列名使用了中文,应该说,这是一个不专业的行为,请勿模仿。

选择某一列,所获得数据类型是Series,程序输出的结果是

姓名
小明    92
小红    87
小刚    90
小丽    98
Name: 数学, dtype: int64

1.2 添加新的列

你可以以现有的列为基础,轻松的添加新的一列,例如,我们可以增加总分一列,代码如下

df['总分'] = df['数学'] + df['语文']
print(df)

程序输出结果

科目  数学  语文   总分
姓名             
小明  92  90  182
小红  87  98  185
小刚  90  87  177
小丽  98  90  188

感受到pandas的魅力了么?计算考试总分,我们无需遍历数据,只需两列相加,就可以得出新的一列

1.3 删除列

删除列,可以使用del 关键字,或者使用pop方法,这和字典删除某个key的方式一模一样

df['总分'] = df['数学'] + df['语文']
del df['语文']
df.pop('数学')

print(df)

程序输出

科目   总分
姓名     
小明  182
小红  185
小刚  177
小丽  188

2. 对行的基本操作

2.1 选择某一行

选择DataFrame的某一行,有两种方法

  1. 使用loc函数按标签选择
  2. 使用iloc函数按整数位置选择

先来看按标签选择

print(df.loc['小明'])

使用loc并提供行的标签,就可以获得这一行的数据,其类型也是Series,程序输出内容

科目
数学    92
语文    90
Name: 小明, dtype: int64 <class 'pandas.core.series.Series'>

接下来演示按整数位置选择

print(df.iloc[0])

小明的数据在第一行,整数索引是0,因此df.iloc[0]所得到的数据仍然是小明的数据

科目
数学    92
语文    90
Name: 小明, dtype: int64

2.2 通过切片操作选择多行

print(df[1:3])
print(type(df[1:3]))

切片操作使用行的整数索引,所得到的数据类型是DataFrame,上面的代码输出结果是

科目  数学  语文
姓名        
小红  87  98
小刚  90  87
<class 'pandas.core.frame.DataFrame'>

2.3 添加行

所谓添加行,其实就是使用append方法将一个DataFrame添加到另一个DataFrame末尾生成一个新的DataFrame

df2 = pd.DataFrame([{'语文': 100, '数学': 100}], index=['学霸'])
df = df.append(df2)
print(df)

程序输出结果

科目   数学   语文
小明   92   90
小红   87   98
小刚   90   87
小丽   98   90
学霸  100  100

2.4 删除行

使用drop方法根据索引标签删除指定行,比如想删除小明的数据

df = df.drop('小明')
print(df)

输出结果

科目  数学  语文
姓名        
小红  87  98
小刚  90  87
小丽  98  90

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案