Python-pandas返回重复数据的index

在处理数据的时候,会出先相同的列或者行,我们需要有时候需要对其中一列或者其中一行进行操作

因为数据清洗的过程会碰到多种情况
下面是我碰到的一种情况
在这里插入图片描述
既有合并的又有空列
使用pandas进行读取后
在这里插入图片描述
现在需要以第一行作为列名,然后去掉NaN的列
读取数据的时候,在pd.read_excel()中可以添加参数header=None这个参数 默认没有头列
代码如下

import pandas as pd
data = pd.read_excel('test.xlsx',header=None)

在这里插入图片描述
接下来处理为NaN的列因为pandas读取NaN只能判断出状态,并不能作为选择,这里需要转变一个想法,我常用的是转换为True or False,刚好pandas里面有自带的函数,代码如下
使用notna()函数

# 因为都进来的数据,我们需要的列名还是在第一行,固我们取第一行的所有
judge_nan_col = data.iloc[1,:].notna().tolist()
print(judge_nan_col)

在这里插入图片描述
tolist()是方便我们取index
接下来是关键的部分了,因为有多个False,所以如果按照我们之前的list.index()这种是不可取的这里我以为大家演示下
在这里插入图片描述
返回的同一个索引,默认是第一次出现的,所以这个方法是不可取的

这里有多个方法
  1. 使用list.index()方法
    需要使用count()函数进行计数
count = judge_nan_col.count(False)
index_list = []
index = -1

# 通过list.index()方法的__start参数,指定起始索引
for i in range(0, count):
	index = judge_nan_col.index(False, index + 1)
	index_list.append(index)
print(index_list)

在这里插入图片描述

  1. 通过索引遍历原列表,对每个元素进行判断
list_len = len(judge_nan_col)
index_list = []
for i in range(0, list_len):
    if judge_nan_col[i] == False:
        index_list.append(i)
print(index_list)

在这里插入图片描述

  1. 使用enumerate()函数
index_list = [i for i, col in enumerate(judge_nan_col) if col == False]
print(index_list)

在这里插入图片描述
目前我能想到的就这三种了,如果其他人还有其他想法,欢迎讨论
获取到我们想要的列了,并且存到了列表中,这下就是进行删除了
pandas自带函数drop()就可以尽心行或列的删除

# 可以根据需要看删除哪一列,我这里是全部进行删除
data = data.drop(index_list,axis=1)
print(data)

在这里插入图片描述
现在离目标很近了,就差第一行了,还是一样,使用data.iloc()函数,重新构建dataframe

# 获取列名
columns = data.iloc[1,:].tolist()
print('columns: ',columns,'\n')
print('=================================')
data = data.iloc[1:,:]
data.columns=columns
print(data)

在这里插入图片描述
输出到excel

data.to_excel('complete.xlsx',index=False)

在这里插入图片描述

处理行,同上 不过删除的时候

需要将data = data.drop(axis=0)
axis=1 转换为 axis=0

### 如何使用Python Pandas库去除数据框中的重复行 为了处理Pandas DataFrame中的重复行,可以利用`drop_duplicates()`方法来移除这些冗余条目[^1]。 此函数提供了多种参数用于定制化去重逻辑: - `subset`: 列表形式指定考虑哪些列来进行唯一性判断,默认全部列参与比较。 - `keep`: 控制保留哪一条重复记录作为代表项。可选值有'first'(默认), 'last', 或者False(不保存任何副本)。 - `inplace`: 布尔型标志位决定是否直接修改原DataFrame对象而不是返回新的实例。 - `ignore_index`: 如果设置为True,则新产生的DataFrame将会获得连续整数索引而非继承旧有的标签。 下面给出一段简单的代码示例展示如何去掉完全相同的两行并只留下第一次出现的那个版本: ```python import pandas as pd # 创建一个含有重复行的数据集 df = pd.DataFrame({ "A": ['foo', 'bar', 'baz', 'foo'], "B": [1, 2, 3, 1], }) print("原始数据:") print(df) # 删除所有重复的行,仅保持首次出现的那一行 result_df = df.drop_duplicates() print("\n删除后的结果:") print(result_df) ``` 如果希望基于特定几列来做重复检测的话,可以通过向`drop_duplicates()`传递`subset`参数实现更精确控制: ```python # 只依据"A"这一列是否存在相同内容判定是否重复行 filtered_df = df.drop_duplicates(subset=["A"]) ``` 对于那些想要忽略某些列而专注于其他列的情况来说非常有用处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vergil_Zsh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值