目录
193、pandas.Series.drop_duplicates方法
194、pandas.Series.duplicated方法
一、用法精讲
191、pandas.Series.drop方法
191-1、语法
# 191、pandas.Series.drop方法
pandas.Series.drop(labels=None, *, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
Return Series with specified index labels removed.
Remove elements of a Series based on specifying the index labels. When using a multi-index, labels on different levels can be removed by specifying the level.
Parameters:
labels
single label or list-like
Index labels to drop.
axis
{0 or ‘index’}
Unused. Parameter needed for compatibility with DataFrame.
index
single label or list-like
Redundant for application on Series, but ‘index’ can be used instead of ‘labels’.
columns
single label or list-like
No change is made to the Series; use ‘index’ or ‘labels’ instead.
level
int or level name, optional
For MultiIndex, level for which the labels will be removed.
inplace
bool, default False
If True, do operation inplace and return None.
errors
{‘ignore’, ‘raise’}, default ‘raise’
If ‘ignore’, suppress error and only existing labels are dropped.
Returns:
Series or None
Series with specified index labels removed or None if inplace=True.
Raises:
KeyError
If none of the labels are found in the index.
191-2、参数
191-2-1、labels(可选,默认值为None):单个标签(标量)或标签列表(可迭代对象),表示要删除的标签或标签列表,可以传入一个或多个标签。
191-2-2、axis(可选,默认值为0):整数或标签,表示轴,可以是0(行)或1(列),在Series
中通常只适用0。
191-2-3、index(可选,默认值为None):单个标签或标签列表,替代labels参数使用,用于指定要删除的索引。
191-2-4、columns(可选,默认值为None):单个标签或标签列表,在Series上不适用,但在DataFrame中使用,指定要删除的列。
191-2-5、level(可选,默认值为None):整数或标签,用于多级索引的情况下,指定要移除的层级。
191-2-6、inplace(可选,默认值为False):布尔值,如果为True,则在原地修改Series并返回None;如果为False,则返回一个新的Series。
191-2-7、errors(可选,默认值为'raise'):'raise'或'ignore',如果设置为'raise',当要删除的标签不存在时会引发错误。如果设置为'ignore',则发生错误时不会显式抛出异常。
191-3、功能
用于从一个Series中删除指定的索引标签(或多个标签),以便进行数据清洗或选择。
191-4、返回值
返回一个新的Series对象,其中包含了原Series中除了指定删除元素外的所有数据。如果任何指定的标签在原Series中不存在,则会引发KeyError
。
191-5、说明
191-5-1、如果尝试删除不存在的标签,并且errors参数未设置为'ignore',将会引发KeyError。
191-5-2、drop方法返回的对象与原对象是不同的,如果不希望保留原始对象(原始数据未改变),可以直接使用返回值。
191-6、用法
191-6-1、数据准备
无
191-6-2、代码示例
# 191、pandas.Series.drop方法
# 191-1、数据清洗-删除无效交易记录
import pandas as pd
# 假设这是交易数据的一个Series
transactions = pd.Series([100, 200, None, 300, 400], index=['t1', 't2', 't3', 't4', 't5'])
# 删除无效的交易记录(即缺失值)
cleaned_trans = transactions.drop(labels=['t3'])
print("清洗后的交易数据:")
print(cleaned_trans, end='\n\n')
# 191-2、特征选择-移除不需要的特征
import pandas as pd
# 假设这是一个特征Series
features = pd.Series([1, 2, 3, 4, 5], index=['feat1', 'feat2', 'feat3', 'feat4', 'feat5'])
# 移除不需要的特征
selected_features = features.drop(labels=['feat4', 'feat5'])
print("选择后的特征:")
print(selected_features, end='\n\n')
# 191-3、处理缺失数据
import pandas as pd
# 假设这是包含缺失值的Series
data_with_nan = pd.Series([None, 1, 2, None, 3, 4], index=['a', 'b', 'c', 'd', 'e', 'f'])
# 删除包含缺失值的记录
cleaned_data = data_with_nan.dropna()
print("处理后的数据:")
print(cleaned_data, end='\n\n')
# 191-4、维度约简-简化数据结构
import pandas as pd
# 假设这是多维数据的Series
multi_index_series = pd.Series([10, 20, 30, 40], index=pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)]))
# 移除某个维度的数据
reduced_data = multi_index_series.drop(labels=('B', 2))
print("维度约简后的数据:")
print(reduced_data, end='\n\n')
# 191-5、数据转换前的准备
import pandas as pd
# 假设这是原始数据
raw_data = pd.Series([10, 20, 30, 40, 50], index=['item1', 'item2', 'item3', 'item4', 'item5'])
# 假设我们要删除一些不需要的项
prepped_data = raw_data.drop(labels=['item4', 'item5'])
print("转换前的准备数据:")
print(prepped_data, end='\n\n')
# 191-6、数据透视-移除不需要的维度
import pandas as pd
# 创建一个多重索引的Series
pivot_data = pd.Series([100, 200, 300], index=pd.MultiIndex.from_tuples([('group1', 'A'), ('group1', 'B'), ('group2', 'A')]))
# 移除某个维度的数据
pivot_reduced = pivot_data.drop(labels=('group1', 'B'))
print("数据透视后的数据:")
print(pivot_reduced)
191-6-3、结果输出
# 191、pandas.Series.drop方法
# 191-1、数据清洗-删除无效交易记录
# 清洗后的交易数据:
# t1 100.0
# t2 200.0
# t4 300.0
# t5 400.0
# dtype: float64
# 191-2、特征选择-移除不需要的特征
# 选择后的特征:
# feat1 1
# feat2 2
# feat3 3
# dtype: int64
# 191-3、处理缺失数据
# 处理后的数据:
# b 1.0
# c 2.0
# e 3.0
# f 4.0
# dtype: float64
# 191-4、维度约简-简化数据结构
# 维度约简后的数据:
# A 1 10
# 2 20
# B 1 30
# dtype: int64
# 191-5、数据转换前的准备
# 转换前的准备数据:
# item1 10
# item2 20
# item3 30
# dtype: int64
# 191-6、数据透视-移除不需要的维度
# 数据透视后的数据:
# group1 A 100
# group2 A 300
# dtype: int64
192、pandas.Series.droplevel方法
192-1、语法
# 192、pandas.Series.droplevel方法
pandas.Series.droplevel(level, axis=0)
Return Series/DataFrame with requested index / column level(s) removed.
Parameters:
levelint, str, or list-like
If a string is given, must be the name of a level If list-like, elements must be names or positional indexes of levels.
axis{0 or ‘index’, 1 or ‘columns’}, default 0
Axis along which the level(s) is removed:
0 or ‘index’: remove level(s) in column.
1 or ‘columns’: remove level(s) in row.
For Series this parameter is unused and defaults to 0.
Returns:
Series/DataFrame
Series/DataFrame with requested index / column level(s) removed.
192-2、参数
192-2-1、level(必须):整数或标签,指定要删除的索引级别,可以是级别的整数位置(如0, 1, 2 等)或级别的标签名称(如'level_name')。
192-2-2、axis(可选,默认值为0):整数或标签,表示轴,可以是0(行)或1(列),在Series中通常只适用0。
192-3、功能
用于从具有多级索引的Series中删除一个级别的索引,该方法适用于多层索引的场景,能够简化数据的访问和处理。
192-4、返回值
返回一个新的Series对象,其中指定的索引级别已删除,原始的Series对象不会被修改。
192-5、说明
192-5-1、如果Series只有一个级别,则droplevel方法可能会引发ValueError。
192-5-2、使用该方法后返回的新Series对象的索引级别会减少,可能会影响实际的数据组织方式,因此在使用前应确认需要删除的级别是否合适。
192-6、用法
192-6-1、数据准备
无
192-6-2、代码示例
# 192、pandas.Series.droplevel方法
import pandas as pd
# 创建一个具有多级索引的Series
index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)], names=['letters', 'numbers'])
data = pd.Series([10, 20, 30, 40], index=index)
# 显示原始Series
print("原始Series:")
print(data)
# 删除索引级别'letters'
result = data.droplevel('letters')
print("\n删除'letters'级别后的Series:")
print(result)
# 可以通过级别的整数位置删除
result_by_index = data.droplevel(0)
print("\n通过索引位置删除后的Series:")
print(result_by_index)
192-6-3、结果输出
# 192、pandas.Series.droplevel方法
# 原始Series:
# letters numbers
# A 1 10
# 2 20
# B 1 30
# 2 40
# dtype: int64
#
# 删除'letters'级别后的Series:
# numbers
# 1 10
# 2 20
# 1 30
# 2 40
# dtype: int64
#
# 通过索引位置删除后的Series:
# numbers
# 1 10
# 2 20
# 1 30
# 2 40
# dtype: int64
193、pandas.Series.drop_duplicates方法
193-1、语法
# 193、pandas.Series.drop_duplicates方法
pandas.Series.drop_duplicates(*, keep='first', inplace=False, ignore_index=False)
Return Series with duplicate values removed.
Parameters:
keep{‘first’, ‘last’, False}, default ‘first’
Method to handle dropping duplicates:
‘first’ : Drop duplicates except for the first occurrence.
‘last’ : Drop duplicates except for the last occurrence.
False : Drop all duplicates.
inplacebool, default False
If True, performs operation inplace and returns None.
ignore_indexbool, default False
If True, the resulting axis will be labeled 0, 1, …, n - 1.
New in version 2.0.0.
Returns:
Series or None
Series with duplicates dropped or None if inplace=True.
193-2、参数
193-2-1、keep(可选,默认值为'first'):控制保留哪个重复项,可选值有:
193-2-1-1、'first'(默认):保留第一次出现的重复项。
193-2-1-2、'last':保留最后一次出现的重复项。
193-2-1-3、False:删除所有重复项。
193-2-2、inplace(可选,默认值为False):布尔值,如果设置为True
,则在原地修改Series
,而不是返回新对象。
193-2-3、ignore_index(可选,默认值为False):布尔值,如果设置为True
,返回的Series
的索引将被重置为默认整数索引。
193-3、功能
用于从Series中删除重复的值,并根据指定的参数控制保留的重复项,该方法非常有用,可以帮助你清理数据,保留唯一的条目。
193-4、返回值
返回一个经过处理的Series对象,其重复项已经根据指定的参数被移除,若inplace=True,则原始Series会被修改,不会返回新对象。
193-5、说明
193-5-1、调用drop_duplicates方法时,如果数据的顺序很重要,确保选择合理的keep参数。
193-5-2、使用inplace=True时,Series将被修改,注意保存原始数据的副本以防需要回退。
193-5-3、当ignore_index=True时,返回的新Series将不保留原始索引。
193-6、用法
193-6-1、数据准备
无
193-6-2、代码示例
# 193、pandas.Series.drop_duplicates方法
import pandas as pd
# 创建一个Series
data = pd.Series([3, 5, 6, 8, 10, 10, 11, 24])
# 显示原始Series
print("原始Series:")
print(data)
# 删除重复项,保留第一次出现
result_first = data.drop_duplicates(keep='first')
print("\n删除重复项(保留第一次):")
print(result_first)
# 删除重复项,保留最后一次出现
result_last = data.drop_duplicates(keep='last')
print("\n删除重复项(保留最后一次):")
print(result_last)
# 删除所有重复项
result_none = data.drop_duplicates(keep=False)
print("\n删除所有重复项:")
print(result_none)
# 原地删除重复项
data.drop_duplicates(inplace=True)
print("\n原地删除重复项后的Series:")
print(data)
193-6-3、结果输出
# 193、pandas.Series.drop_duplicates方法
# 原始Series:
# 0 3
# 1 5
# 2 6
# 3 8
# 4 10
# 5 10
# 6 11
# 7 24
# dtype: int64
#
# 删除重复项(保留第一次):
# 0 3
# 1 5
# 2 6
# 3 8
# 4 10
# 6 11
# 7 24
# dtype: int64
#
# 删除重复项(保留最后一次):
# 0 3
# 1 5
# 2 6
# 3 8
# 5 10
# 6 11
# 7 24
# dtype: int64
#
# 删除所有重复项:
# 0 3
# 1 5
# 2 6
# 3 8
# 6 11
# 7 24
# dtype: int64
#
# 原地删除重复项后的Series:
# 0 3
# 1 5
# 2 6
# 3 8
# 4 10
# 6 11
# 7 24
# dtype: int64
194、pandas.Series.duplicated方法
194-1、语法
# 194、pandas.Series.duplicated方法
pandas.Series.duplicated(keep='first')
Indicate duplicate Series values.
Duplicated values are indicated as True values in the resulting Series. Either all duplicates, all except the first or all except the last occurrence of duplicates can be indicated.
Parameters:
keep
{‘first’, ‘last’, False}, default ‘first’
Method to handle dropping duplicates:
‘first’ : Mark duplicates as True except for the first occurrence.
‘last’ : Mark duplicates as True except for the last occurrence.
False : Mark all duplicates as True.
Returns:
Series[bool]
Series indicating whether each value has occurred in the preceding values.
194-2、参数
194-2-1、keep(可选,默认值为'first'):参数控制如何标识重复项,其可能取值如下:
194-2-1-1、'first'(默认值):标识除第一次出现的所有后续重复项为True,第一次出现的标识为False。例如,在序列[1, 2, 2, 3]中,第二个2会被标识为重复(True),而第一个2会被标识为不重复(False)。
194-2-1-2、'last':标识除最后一次出现的所有前置重复项为True,最后一次出现的标识为False。例如,在序列[1, 2, 2, 3]中,第一个 2
会被标识为重复(True),而第二个 2
会被标识为不重复(False)。
194-2-1-3、False:标识所有的重复项为True,无论它们在系列中的位置。例如,在序列[1, 2, 2, 3]中,两个2都会被标识为重复(True)。
194-3、功能
用于检测一个Pandas Series对象中的重复项,并返回一个布尔值的Series,以标识哪些元素是重复的。
194-4、返回值
返回一个布尔值Series,表示每个元素是否为重复项,第一个出现的元素(取决于keep参数的取值)标记为False,后续的重复元素标记为True。
194-5、说明
无
194-6、用法
194-6-1、数据准备
无
194-6-2、代码示例
# 194、pandas.Series.duplicated方法
import pandas as pd
# 创建一个示例系列
data = pd.Series([1, 2, 2, 3, 4, 4, 5, None, None])
# 使用keep='first'查找重复项,保持第一次出现
duplicated_first = data.duplicated(keep='first')
print("Keep='first':\n", duplicated_first)
# 使用keep='last'查找重复项,保持最后一次出现
duplicated_last = data.duplicated(keep='last')
print("\nKeep='last':\n", duplicated_last)
# 使用keep=False查找重复项,标记所有重复项
duplicated_all = data.duplicated(keep=False)
print("\nKeep=False:\n", duplicated_all)
194-6-3、结果输出
# 194、pandas.Series.duplicated方法
# Keep='first':
# 0 False
# 1 False
# 2 True
# 3 False
# 4 False
# 5 True
# 6 False
# 7 False
# 8 True
# dtype: bool
#
# Keep='last':
# 0 False
# 1 True
# 2 False
# 3 False
# 4 True
# 5 False
# 6 False
# 7 True
# 8 False
# dtype: bool
#
# Keep=False:
# 0 False
# 1 True
# 2 True
# 3 False
# 4 True
# 5 True
# 6 False
# 7 True
# 8 True
# dtype: bool
195、pandas.Series.equals方法
195-1、语法
# 195、pandas.Series.equals方法
pandas.Series.equals(other)
Test whether two objects contain the same elements.
This function allows two Series or DataFrames to be compared against each other to see if they have the same shape and elements. NaNs in the same location are considered equal.
The row/column index do not need to have the same type, as long as the values are considered equal. Corresponding columns and index must be of the same dtype.
Parameters:
other
Series or DataFrame
The other Series or DataFrame to be compared with the first.
Returns:
bool
True if all elements are the same in both objects, False otherwise.
195-2、参数
195-2-1、other(必须):需要比较的另一个Series对象。
195-3、功能
用于比较两个Series对象是否相等,它比较两个Series的元素、索引和值类型,以确定它们是否完全相同。
195-4、返回值
返回一个布尔值,如果两个Series对象完全相等,则返回True;否则,返回False。
195-5、说明
195-5-1、该方法不仅比较Series的元素,还比较索引和元素的数据类型。
195-5-2、NaN值被认为是相等的,这与标准的NaN比较规则不同(通常NaN不等于NaN)。
195-6、用法
195-6-1、数据准备
无
195-6-2、代码示例
# 195、pandas.Series.equals方法
import pandas as pd
import numpy as np
# 创建两个示例系列
data1 = pd.Series([1, 2, 3, np.nan])
data2 = pd.Series([1, 2, 3, np.nan])
data3 = pd.Series([1, 2, 3, 4])
data4 = pd.Series([1, 2, 3, 4], index=[0, 1, 2, 3])
data5 = pd.Series([1, 2, 3, 4], index=[1, 2, 3, 4])
# 比较两个相等的系列
result1 = data1.equals(data2)
print("data1.equals(data2):", result1)
# 比较两个不相等的系列(值不同)
result2 = data1.equals(data3)
print("data1.equals(data3):", result2)
# 比较两个不相等的系列(索引不同)
result3 = data4.equals(data5)
print("data4.equals(data5):", result3)
# 比较一个系列与自己
result4 = data1.equals(data1)
print("data1.equals(data1):", result4)
195-6-3、结果输出
# 195、pandas.Series.equals方法
# data1.equals(data2): True
# data1.equals(data3): False
# data4.equals(data5): False
# data1.equals(data1): True