目录
  • 下面是我碰到的一种情况
  • 这里有多个方法
    • 1.使用list.index()方法
    • 2.通过索引遍历原列表,对每个元素进行判断
    • 3.使用enumerate()函数
  • 总结

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

    因为数据清洗的过程会碰到多种情况

    下面是我碰到的一种情况

    Python-pandas返回重复数据的index问题

    既有合并的又有空列

    使用pandas进行读取后

    Python-pandas返回重复数据的index问题

    现在需要以第一行作为列名,然后去掉NaN的列

    读取数据的时候,在pd.read_excel()中可以添加参数header=None这个参数 默认没有头列

    代码如下

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

    Python-pandas返回重复数据的index问题

    接下来处理为NaN的列

    因为pandas读取NaN只能判断出状态,并不能作为选择,这里需要转变一个想法,我常用的是转换为True or False,刚好pandas里面有自带的函数,代码如下:

    使用notna()函数

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

    Python-pandas返回重复数据的index问题

    tolist()是方便我们取index 

    接下来是关键的部分了,因为有多个False,所以如果按照我们之前的list.index()这种是不可取的 

    这里我以为大家演示下

    Python-pandas返回重复数据的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)
    

    Python-pandas返回重复数据的index问题

    2.通过索引遍历原列表,对每个元素进行判断

    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)
    

    Python-pandas返回重复数据的index问题

    3.使用enumerate()函数

    index_list = [i for i, col in enumerate(judge_nan_col) if col == False]
    print(index_list)
    

    Python-pandas返回重复数据的index问题

    目前我能想到的就这三种了

    获取到我们想要的列了,并且存到了列表中,这下就是进行删除了 

    pandas自带函数drop()就可以尽心行或列的删除

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

    Python-pandas返回重复数据的index问题

    现在离目标很近了,就差第一行了,还是一样,使用data.iloc()函数,重新构建dataframe

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

    Python-pandas返回重复数据的index问题

    输出到excel

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

    Python-pandas返回重复数据的index问题

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

    需要将data = data.drop(axis=0) 

    axis=1 转换为 axis=0

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。