文章目录
1. 读入数据
import pandas as pd #引入pandas库
df = pd.read_csv('students.csv',header=0,encoding='gbk') #读入文件中的数据集,保存到DataFrame对象df中
2. Pandas数据结构
Series
Series是一种类似于一维数组的对象,每个Series对象都由两个数组组成:
- Index: 从numpy数组继承的Index对象,用于保存标签信息;
- Value: 保存值的numpy数组,值的数据类型没有限制,可以是各种numpy数据类型。
Index | Value |
---|---|
2022001 | 95 |
2022002 | 85 |
2022003 | 90 |
1. 创建Series对象
Series(data,[参数列表])
- data:传入的数据,可以是列表、元祖、字典、numpy数组。
- index:指定索引,要求是一个列表。
如果没有指定索引,系统自动创建0~n-1(n为data中元素的个数)的整数型索引。
使用字典创建Series对象时,字典的key作为索引。
marks = pd.Series([95,85,90],index=['2022001','2022002','2022003'])
# 通过对象的index和values属性,获取索引对象和值的数组表示形式。
print(marks.index)
print(marks.value)
2. 数据访问
- 查询序号为1的学生的成绩
marks[1]
>>> 88
- 查询学号为2022001的学生的成绩
marks['2022001']
>>> 95
- 查询位置序号为1和3的两名学生的成绩
marks[[1,3]]
>>> 2022001 95
>>> 2022003 90
marks[1:3] # 切片
>>> 2022001 95
>>> 2022003 90
- 查询学号为2022001和2022003的学生的成绩
marks[['2022001','2022003']]
>>> 2022001 95
>>> 2022003 90
- 查询所有大于85分的学生成绩
marks[marks>85]
>>> 2022001 95
>>> 2022003 90
3. 数据修改
- 将marks中成绩低于90分的成绩修改为60分
marks[marks<90]=60
4. 数据删除
- 删除marks中学号为2022001,2022002的学生成绩
marks.drop(['2022001','2022002'],inplace=True)
5. 数据添加
- Series对象可以直接添加数据
# 在marks中添加学号为“2022004”的学生
marks['2022004'] = 98
- 使用apppend方法将一组数据添加到原对象中
# 在marks中添加学号为“2022005”和“2022006”的学生,成绩分别为73,59
new_stu = pd.Series({'2022005':73,'2022006':59})
new_marks = marks.append(new_stu)
#【注】使用append方法将new_stu和 mark拼接成一个新的Series对象new_mark, new_stu和 marks保持不变。
DataFrame
每个DataFrame对象由三部分组成:
- 行索引
- 列索引
- 值
Index | Name | Mark | Professional |
---|---|---|---|
2022001 | Daisy | 95 | Math |
2022002 | Sarah | 85 | MBA |
2022003 | Eric | 90 | Accounting |
1. 创建DataFrame对象
DataFrame(data,[参数列表])
- data:用于创建DataFrame的数据,不可缺省。
可以是ndarry二维数组、由等长列表或numpy数组组成的字典、由Series组成的字典、由列表或元组组成的列表或其它DataFrame对象。 - index:行标签,列表类型。
若没有指定行索引,自动生成0~n-1的整数型索引,n为数据的行数。 - columns: 列标签,列表类型。
若没有指定列索引,自动生成0~m-1的整数型索引,m为数据的列数。
使用字典创建DataFrame对象时,字典的key用作列标签。
data = [['Daisy',95,'Math'],['Sarah',85,'MBA'],['Eric',90,'Accounting']]
column = ['Name','Mark','Professional']
idx = [2022001,2022002,2022003]
students = pd.DataFrame(data,index=idx,columns=column)
# 通过对象的index、columns和values属性,获取索引对象和值的数组表示形式。
print(students.index)
print(students.columns)
print(students.values)
2. 数据访问
数据选择方法 | 说明 | |
选择单个数据 | obj.iloc[iloc,cloc] | 根据位置序号选择第iloc行,第cloc列的单个数据 |
obj.loc[index,col] | 根据索引选择index所在行,col所在列的单个数据 | |
obj.at[index,col] | 根据索引选择index所在行,col所在列的单个数据 | |
obj.get_value(index,col) | 根据索引选择index所在行,col所在列的单个数据 | |
选择某些行某些列的数据 | obj.iloc[iloclist,cloclist] | 根据位置序号选择某些行某些列的数据,省略cloclist选择所有列 |
obj.iloc[a:b,c:d] | 根据位置序号,选择a~b-1行,c~d-1列的数据,行或列用:替代,表示选择所有行或列 | |
obj.loc[indexlist,collist] | 根据索引选择某些行某些列的数据,省略collist,选择所有列 | |
obj[col] | 根据索引选择某列(全部行)的数据 ,等价于obj.col | |
obj[collist] | 根据索引选取多个列(全部行)的数据 | |
obj[a:b] | 根据位置序号,选择a~b-1行所有列的数据 | |
根据条件筛选数据 | obj.loc[condition,collist] | 根据所构造的条件表达式,选择满足条件的行 |
- 查询第1行第2列的数据
students.iloc[1,2]
>>> 'MBA'
- 查询学号为2022001学生的成绩
students.loc[2022001,'Mark']
>>> 95
- 查询第0、2行第0,2列的数据
students.iloc[[0,2],[0,2]]
>>> Name Professional
2022001 Daisy Math
2022003 Eric Accounting
- 查询前3行,最后2列的数据
students.iloc[:3,-2:]
>>> Mark Professional
2022001 95 Math
2022002 85 MBA
2022003 90 Accounting
3. 数据修改
- 将数学专业修改为统计学
students.loc[students.Professional=='Math','Professional']='Statics'
4. 数据删除
Drop(labels = None, axis = 0, index = None, columns = None, level = None, inplace = False, errors = ‘raise’)
- labels:要删除的列或者行,如果要删除多个,传入列表
- axis:轴向参数,指明按行或列删除数据。
axis=0,删除数据的行,axis=1,删除数据的列。默认axis=0 - index:指定的一行或多行
- columns:指定的一列或多列
- level:索引层级,将删除此层级
- inplace:布尔值,是否生效
- errors:ignore或raise,默认为raise,如果为ignore,则容忍错误,仅删除现有标签
【注】drop方法产生副本,在副本中删除数据。要删除原始对象中的数据,使用drop方法时,设置参数 inplace=True,或采用重新赋值的方式。
- 删除students中学号为2022001和2022002的学生
students.drop(['2022001','2022002'],inplace=True)
- 删除students中的Professional列:
students.drop('Prfessional',axis=1,inplace=True)
5. 数据添加
- DataFrame对象添加新的列数据
# 给students添加Age列
students['Age']=[20,21,20]
# 【注】若列标签“年龄”不存在,添加新列,否则,修改该列的值。
- DataFrame对象添加行数据时,需要为新增加的数据创建Series对象,然后使用append方法进行添加
# 在students中添加学号2022009的学生
new_stu1 = pd.Series(['Amy',83, 'MBA'])
new_stu1.index = ['Name','Mark','Professional']
new_stu1.name = '20220009'
new_students = students.append(new_stu1)
希望能够对你有所帮助。