目录
import pandas as pd
data1 = {
'语文': [0, 19, 9, 28, 91, 56],
'数学': [64, 81, 80, 17, 37, 52],
'英语': [40, 25, 45, 58, 67, 57]
}
data2 = {
'化学': [32, 38, 7, 12, 33, 28],
'物理': [69, 43, 44, 62, 3, 67],
'体育': [93, 7, 77, 95, 40, 89],
'科目': ['科一', '科二', '科三', '科四', '科五', '科六']
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2, index=["a", "b", "c", "d", "e", "f"])
新增数据
concat追加数据(增加行数据)
在 Pandas 中,
append()方法用于将一个 DataFrame 或 Series 的数据追加到另一个 DataFrame 的末尾。从 Pandas 2.0.0 开始,append()方法已被弃用,而是使用pd.concat()方法来实现相同的功能。def concat( objs: Iterable[Series | DataFrame] | Mapping[HashableT, Series | DataFrame], *, axis: Axis = 0, join: str = "outer", ignore_index: bool = False, keys: Iterable[Hashable] | None = None, levels=None, names: list[HashableT] | None = None, verify_integrity: bool = False, sort: bool = False, copy: bool | None = None, ) -> DataFrame | Series:常用参数说明:
ignore_index=True :是否生成新的索引,新索引使用系统默认的整型索引。
axis=0:表示沿着指定的轴拼接(默认为0,表示行方向;1时表示为列方向)。
result1 = pd.concat([df1, df2], ignore_index=False)
result2 = pd.concat([df1, df2], axis=0)
print(result1)
print(result2)
insert插入数据(增加列数据)
def insert( self, loc: int, column: Hashable, value: Scalar | AnyArrayLike, allow_duplicates: bool | lib.NoDefault = lib.no_default, ) -> None:参数说明:
loc: 插入位置的索引(从 0 开始)。例如,
loc=0表示在第一列插入,loc=1表示在第二列插入,以此类推。column: 新列的名称(字符串)。
value: 要插入的数据。可以是一个标量值、列表、NumPy 数组或
Series对象。allow_duplicates: 是否允许插入重复的列名。默认为
False,即不允许重复列名。
print(df1)
value = [80, 38, 70, 51, 33, 48]
df1.insert(loc=2, column='生物', value=value)
print(df1)

删除数据
drop()删除指定行或列
在 Pandas 中,drop() 方法用于删除 DataFrame 或 Series 中的行或列。它是一个非常常用的数据清理工具,可以根据索引或标签删除指定的行或列。
def drop( self, labels: IndexLabel | None = None, *, axis: Axis = 0, index: IndexLabel | None = None, columns: IndexLabel | None = None, level: Level | None = None, inplace: bool = False, errors: IgnoreRaise = "raise", ) -> DataFrame | None:
drop()方法的常用参数:
参数 描述 labels要删除的行或列的标签(可以是单个标签或列表)。使用 labels时最好指定axis参数来说明要删除行或列,否则找不到对应的索引会报错,也可使用errors参数来绕过报错。但还是推荐使用index和columns参数来删除。axis删除方向: 0表示删除行(默认),1表示删除列。index直接指定要删除的行(替代 labels和axis=0)。columns直接指定要删除的列(替代 labels和axis=1)。inplace是否原地修改 DataFrame。默认为 False,返回一个新对象。选择True时,修改后原数据会直接被修改。errors如果指定的标签不存在,是否抛出错误。默认为 'raise',可选'ignore'。errors='ignore'可以忽略不存在的标签。
print(df2.drop('a', axis=0)) # 指定一行删除
print(df2.drop(['a', 'b'], axis=0)) # 指定多行删除
print(df2.drop('化学', axis=1)) # 指定一列删除
print(df2.drop(['科目', '化学'], axis=1)) # 指定多列删除
print(df2.drop(index=['a', 'b'], columns=['科目', '化学', '美术'], errors='ignore')) # 删除指定的行和列
使用inplace参数修改源数据
df2.drop(index=['a', 'b'], columns=['科目', '化学', '美术'], errors='ignore', inplace=True)
print(df2)
drop_duplicates删除重复的行
def drop_duplicates( self, subset: Hashable | Sequence[Hashable] | None = None, *, keep: DropKeep = "first", inplace: bool = False, ignore_index: bool = False, ) -> DataFrame | None:参数说明:
Keep:支持'first', 'last', ``False``,默认为first,表示要保留的数据,False是表示都不保留。
ignore_index:是否生成新的索引,新索引使用系统默认的整型索引。
inplace:是否原地修改 DataFrame。默认为
False,返回一个新对象。选择True时,修改后原数据会直接被修改。
data3 = {
'语文': [0, 9, 2, 5, 3, 3, 5],
'数学': [6, 8, 1, 5, 3, 3, 5],
'英语': [4, 4, 5, 5, 3, 3, 5]
}
df3 = pd.DataFrame(data3)
print(df3)
print(df3.drop_duplicates())

修改数据
使用loc索引修改
一维数组对象的修改
s = pd.Series({"李": 82, "陈": 93, "张": 91, "曾": 78, "邓": 68})
s['曾'] = 999
print(s)
二维数组对象的修改
df3.loc[2] = [1, 7, 3] # 修改一行数据
df3.loc[2, '语文'] = 1000 # 修改单个数据
数组对象.列名
s = pd.Series({"李": 82, "陈": 93, "张": 91, "曾": 78, "邓": 68})
s.曾 = 999
# 二维数组
df3.语文 = [1, 7, 3, 977, 0, 8, 9] # 修改列数据
replace替换
在 Pandas 中,replace() 方法用于替换 DataFrame 或 Series 中的值。它可以替换单个值、列表中的多个值、正则表达式匹配的值,甚至可以使用字典指定复杂的替换规则。replace() 是一个非常灵活且强大的工具,常用于数据清洗和预处理。
def replace( self, to_replace=None, value=lib.no_default, *, inplace: bool_t = False, limit: int | None = None, regex: bool_t = False, method: Literal["pad", "ffill", "bfill"] | lib.NoDefault = lib.no_default, ) -> Self | None:
replace()方法的常用参数:
参数 描述 to_replace需要替换的值(可以是单个值、列表、字典或正则表达式)。 value替换后的值(可以是单个值或列表)。 inplace是否原地修改 DataFrame。默认为 False,返回一个新对象。limit替换的最大次数。 regex是否将 to_replace解释为正则表达式。默认为False。method替换方法: 'pad'(向前填充)或'ffill'(向后填充)。
df3.replace(3, 333) # 替换单个值
df3.replace([3, 9], [333, 999]) # 替换多个值
1、使用字典替换指定列的指定值
print(df3)
print(df3.replace({'语文': {2: 20, 0: 100}, '数学': {5: 50}}))

2、正则表达式匹配要修改的内容
data3 = {
'语文': [0, 9, 2, 5, 3, 3, 5],
'数学': [6, 8, 's', 5, 3, 3, 5],
'英语': [4, 4, 5, 5, 3, 3, 'u']
}
df3 = pd.DataFrame(data3)
print(df3)
print(df3.replace(to_replace=r'[us]', value='x', regex=True))

3、替换缺失值
import numpy as np
# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': [5, np.nan, 7, 8],
'C': ['p', 'q', 'r', 's']
})
print(df)
df_replaced = df.replace(np.nan, 0)
print(df_replaced)

修改行列索引名
pandas 中的 rename 方法用于重命名 DataFrame 或 Series 的轴标签(即行索引或列名)。它可以灵活地修改行索引或列名,并且可以选择是否直接修改原始对象。
DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors='ignore')参数:
mapper: 用于重命名的字典或函数。可以是一个字典(如
{'old_name': 'new_name'})或一个函数(如str.upper)。index: 重命名行索引的字典或函数。
columns: 重命名列名的字典或函数。
axis: 指定要重命名的轴。
0或'index'表示行索引,1或'columns'表示列名。默认为None,表示根据mapper推断。copy: 是否返回一个新的对象。默认为
True。inplace: 是否直接修改原始对象。默认为
False。level: 如果轴是多级索引(
MultiIndex),则指定要重命名的级别。errors: 如何处理未找到的键。
'ignore'(默认)表示忽略未找到的键,'raise'表示抛出异常。
data3 = {
'语文': [0, 9, 2, 5],
'数学': [6, 8, 3, 8],
'英语': [4, 4, 5, 5]
}
df3 = pd.DataFrame(data3)
print(df3)
df3.rename(columns={'语文': 'Yu', '数学': 'shu'}, inplace=True) # 重命名指定列索引名
df3.rename(index={0: 'row1', 1: 'row2'}, inplace=True) # 重命名指定行索引名
df3.rename(columns=str.upper, inplace=True) # 使用函数重命名,将列名转大写
print(df3)

重命名多级索引的列:如果 DataFrame 有多级列名(MultiIndex),可以指定 level 参数来重命名某一级别。
df = pd.DataFrame({
('A', 'a1'): [1, 2, 3],
('A', 'a2'): [4, 5, 6],
('B', 'b1'): [7, 8, 9]
})
print(df)
df.rename(columns={'a1': 'x1', 'a2': 'x2'}, level=1, inplace=True)
print(df)
