Python--pandas
pandas 中有两种常用的基本结构:
- Series
一维数组,与 Numpy 中的一维 array 类似。二者与 Python 基本的数据结构 List 也很相近。Series 能保存不同种数据类型,字符串、boolean值、数字等都能保存在 Series 中。
- DataFrame
二维的表格型数据结构。很多功能与 R 中的 data.frame 类似。可以将 DataFrame 理解为 Series 的容器。以下的内容主要以 DataFrame 为主。
Series类型
一维可以用一维列表初始化,series的下标都是数字(可以自定义下标参数),类型是统一的
import numpy as np
import pandas as pd
#np.nan表示此处为空值
a = pd.Series([1,2,np.nan,4,5],index=['a','b','c','d','e'])
print(a)
# a 1.0
# b 2.0
# c NaN
# d 4.0
# e 5.0
使用a.index获得索引
使用a.values获得里面的值
支持使用下标索引
import numpy as np
import pandas as pd
#np.nan表示此处为空值
a = pd.Series([1,2,3,4,5])
print(a.index)#RangeIndex(start=0, stop=5, step=1)
print(a.values)#[1 2 3 4 5]
print(a[1])#2
支持切片操作,结果会输出索引和后面的具体值
import pandas as pd
a = pd.Series([1,2,3,4,5])
print(a[1:3])
# 1 2
# 2 3
# dtype: int64
可以为索引赋值,方便后续对数据的更加直观的查看
import pandas as pd
a = pd.Series([1,2,3,4,5])
a.index = list('abcde')
print(a)
# a 1
# b 2
# c 3
# d 4
# e 5
# dtype: int64
DataFrame类型
是一个二维结构,首先构造一组时间序列,作为第一维的下标,然后创建一个DataFrame结构,如果不指定index和columns,他们的值将从0开始
import numpy as np
import pandas as pd
date = pd.date_range('20250801', periods=6)
print(date)
# DatetimeIndex(['2025-08-01', '2025-08-02', '2025-08-03', '2025-08-04',
# '2025-08-05', '2025-08-06'],
# dtype='datetime64[ns]', freq='D')
df = pd.DataFrame(np.random.randn(6, 4), index=date, columns=list('ABCD'))
print(df)
# A B C D
# 2025-08-01 -0.256814 0.047517 -0.235865 1.112008
# 2025-08-02 0.471276 1.082722 -0.802634 -0.972199
# 2025-08-03 1.410286 0.280307 -0.657228 -0.907497
# 2025-08-04 1.545917 0.098314 -0.900360 -0.883484
# 2025-08-05 -0.311387 -0.835689 0.037501 -0.265389
# 2025-08-06 0.526761 -0.065319 -1.548344 -0.677999
使用字典传入数据,字典每一个key代表一列,value可以是各种能够转化成Series的对象。与Series要求所有的类型都一致不同,DataFrame只要求每一列数据的格式相同
import numpy as np
import pandas as pd
df = pd.DataFrame({'A':1.,
'B':'2025-08-01',
'C':pd.Series(1,index=list(range(4))),
'D':np.array([3]*4,dtype='int32'),
'E':pd.Categorical(["train","test","train","test"]),
'F':'abc'})
print(df)
# A B C D E F
# 0 1.0 2025-08-01 1 3 train abc
# 1 1.0 2025-08-01 1 3 test abc
# 2 1.0 2025-08-01 1 3 train abc
# 3 1.0 2025-08-01 1 3 test abc
查看数据
使用head和tail方法可以分别查看最前面几行和最后几行的数据(默认是5)
下标使用 index 属性查看,列标使用 columns 属性查看,数据值使用 values 查看
import numpy as np
import pandas as pd
df = pd.DataFrame({'A':1.,
'B':'2025-08-01',
'C':pd.Series(1,index=list(range(4))),
'D':np.array([3]*4,dtype='int32'),
'E':pd.Categorical(["train","test","train","test"]),
'F':'abc'})
print(df.head())
# A B C D E F
# 0 1.0 2025-08-01 1 3 train abc
# 1 1.0 2025-08-01 1 3 test abc
# 2 1.0 2025-08-01 1 3 train abc
# 3 1.0 2025-08-01 1 3 test abc
print(df.tail(3))
# A B C D E F
# 1 1.0 2025-08-01 1 3 test abc
# 2 1.0 2025-08-01 1 3 train abc
# 3 1.0 2025-08-01 1 3 test abc
print(df.index)
#Index([0, 1, 2, 3], dtype='int64')
print(df.columns)
#Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
print(df.values)
# [[1.0 '2025-08-01' 1 3 'train' 'abc']
# [1.0 '2025-08-01' 1 3 'test' 'abc']
# [1.0 '2025-08-01' 1 3 'train' 'abc']
# [1.0 '2025-08-01' 1 3 'test' 'abc']]
读取数据及数据操作
所用数据:

行操作
以读取excel表格为例,依然可以使用head和tail方法进行读取
使用iloc显示行内容,支持切片显示多行内容
添加新行时,需添加的数据形式需要是columns:values的列表形式,使用pd.concat()方法将需添加的数据和原始数据进行合并,pd.concat()方法的参数ignore_index=True表示合并后的 DataFrame 会生成一个新的整数索引(从 0 开始递增),避免索引冲突
使用drop()删除某一行,在括号内选择所要删除的索引
import numpy as np
import pandas as pd
df = pd.read_excel(r"C:\Users\user\Desktop\test_data.xlsx")
#使用iloc的切片用法输出内容
print(df.iloc[0:3])
# 序号 姓名 年龄 性别 班级
# 0 1 张三1 18 男 1班
# 1 2 张三2 19 男 2班
# 2 3 张三3 18 男 1班
# 新数据(转换为DataFrame,并忽略索引以避免冲突)
new_data = {"序号": "11", "姓名": "李四", "年龄": "100", "性别": "女", "班级": "3班"}
new_row = pd.DataFrame([new_data]) # 注意:数据需要是列表形式(单行)
# 使用pd.concat合并
df = pd.concat([df, new_row], ignore_index=True)
print(df[-3:])
# 序号 姓名 年龄 性别 班级
# 8 9 张三9 19 男 1班
# 9 10 张三10 18 男 1班
# 10 11 李四 100 女 3班
# 删除一行
df = df.drop([10])
print(df[-3:])
# 序号 姓名 年龄 性别 班级
# 7 8 张三8 18 男 1班
# 8 9 张三9 19 男 1班
# 9 10 张三10 18 男 1班
列操作
查看列时可以直接使用.columns查看列的表头信息,还可以使用类似字典的方式查看某一列或某几列的全部信息,查看某几列时需要用列表格式查看
增加一列使用类似字典增加数据的方式直接增加
删除一列使用drop(),但在里面需要设置axis参数,等于0时表示对行操作,等于1表示对列操作
通过标签选择数据使用df.loc[[index].[column]]方法
import numpy as np
import pandas as pd
df = pd.read_excel(r"C:\Users\user\Desktop\test_data.xlsx")
# 查看列
print(df.columns)
# Index(['序号', '姓名', '年龄', '性别', '班级'], dtype='object')
print(df["姓名"][:3])
# 0 张三1
# 1 张三2
# 2 张三3
# Name: 姓名, dtype: object
print(df[["姓名","班级"]][:3])
# 姓名 班级
# 0 张三1 1班
# 1 张三2 2班
# 2 张三3 1班
df["成绩"] = 100
print(df[:3])
# 序号 姓名 年龄 性别 班级 成绩
# 0 1 张三1 18 男 1班 100
# 1 2 张三2 19 男 2班 100
# 2 3 张三3 18 男 1班 100
df = df.drop("成绩", axis=1)
print(df[:3])
# 序号 姓名 年龄 性别 班级
# 0 1 张三1 18 男 1班
# 1 2 张三2 19 男 2班
# 2 3 张三3 18 男 1班
data = df.loc[1,"姓名"]
print(data)#张三2
data = df.loc[[1,2,3],["姓名","年龄","班级"]]
print(data)
# 姓名 年龄 班级
# 1 张三2 19 2班
# 2 张三3 18 1班
# 3 张三4 29 3班
条件选择
使用不同条件筛选所需要的所有数据,并且df["年龄”]可以写成df.年龄,书写更加方便
import numpy as np
import pandas as pd
df = pd.read_excel(r"C:\Users\user\Desktop\test_data.xlsx")
data = df[(df.年龄==18)& (df.班级=='1班')]
print(data)
# 序号 姓名 年龄 性别 班级
# 0 1 张三1 18 男 1班
# 2 3 张三3 18 男 1班
# 7 8 张三8 18 男 1班
# 9 10 张三10 18 男 1班
缺失值及异常值处理
isnull()方法返回布尔值对象,判断哪些值是缺失值,False为不缺,True为缺失
fillna()方法用来填充缺失值
df.dropna()用来删除缺失值,可以使用参数axis=0来选择行或列
import numpy as np
import pandas as pd
df = pd.read_excel(r"C:\Users\user\Desktop\test_data.xlsx")
#输出有缺失值的一行内容
data = df[df["年龄"].isnull()]
print(data)
#填充缺失的内容
#将要填充的内容直接给空位
df["年龄"] = df["年龄"].fillna(18)
print(df)
数据保存
使用df.to_excel("文件路径")方法进行保存即可
更多推荐
所有评论(0)