关于#python#的问题:请问对于未命名的列索引应该怎么编码提取

请问对于未命名的列索引应该怎么编码提取?
在Excel中未命名列位于第二行

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7794251
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Python写出Excel文件数字类型变科学计数法以及精度丢失尾数变成0修复笔记
  • 除此之外, 这篇博客: 我的第一个爬取多页式的python小程序之爬取电影天堂最新电影前七页所有电影的详情页中的 爬取了电影天堂最新电影里面的前七页所有电影的详情页面,并逐条写入到excel 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • import requests
    from lxml import etree
    import pandas as pd
    
    url = 'https://www.dytt8.net/html/gndy/dyzz/index.html'
    HEADERS = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}
    MOVIE = {}
    
    
    def get_main_url(url):
        """获取传入url里获取的所有电影列表的详情页面的url"""
    
        ori_url = 'https://www.dytt8.net'
        resp = requests.get(url=url, headers=HEADERS)
        text = resp.content.decode("gbk", 'ignore')  # 可能有gbk都处理不了的特殊字符,必须传入ignore参数
    
        html = etree.HTML(text)
        tables = html.xpath("//table[@class='tbspan']")
        det_url_list = []
        for table in tables:
            detail_ur = table.xpath(".//a/@href")[0]
            detail_urls = ori_url + detail_ur
            det_url_list.append(detail_urls)
        return det_url_list
    
    
    def get_detail_page(url, i):
        resp = requests.get(url=url, headers=HEADERS)
        text = resp.content.decode("gbk", 'ignore')
        html = etree.HTML(text)
        MOVIE['索引'] = [i]
        title = html.xpath("//div[@class='title_all']//font[@color='#07519a']/text()")[0]
        MOVIE['电影名'] = title
        zooms = html.xpath("//div[@id='Zoom']")[0]
        try:
            poster = zooms.xpath(".//img/@src")[0]
            MOVIE['海报地址'] = poster
        except IndexError:
            MOVIE['海报地址'] = ['获取失败']
    
        def parser_cont(cont, rule):
            return content.replace(rule, '').strip()
    
        contents = zooms.xpath(".//text()")
        for index, content in enumerate(contents):
            if content.startswith('◎产  地'):
                content = parser_cont(content, '◎产  地')
                MOVIE['制片国家'] = content
            elif content.startswith('◎类  别'):
                content = parser_cont(content, '◎类  别')
                MOVIE['类别'] = content
            elif content.startswith('◎上映日期'):
                content = parser_cont(content, '◎上映日期')
                MOVIE['上映日期'] = content
            elif content.startswith('◎豆瓣评分'):
                content = parser_cont(content, '◎豆瓣评分')
                MOVIE['豆瓣评分'] = content
            elif content.startswith('◎片  长'):
                content = parser_cont(content, '◎片  长')
                MOVIE['片长'] = content
            elif content.startswith('◎主  演'):
                content = parser_cont(content, '◎主  演')
                actors = [content]
                MOVIE['主演'] = actors
                for x in range(index + 1, len(contents)):
                    actor_main = contents[x].strip()
                    if actor_main.startswith('◎'):
                        break
                    actors.append(actor_main)
    
        return MOVIE
    
    
    def spider():
        i = 0
        base_url = 'https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html'
        for x in range(1, 8):
            # 第一个for循环用来获取七页电影列表的url
            url = base_url.format(x)
            det_url_list = get_main_url(url)
            for det_url in det_url_list:
                # 这里的for循环用来获取每一页包含的每一部电影的详情页面的url
                get_detail_page(det_url, i)
                i += 1
                print(MOVIE)
                movies = pd.read_excel('./movie.xlsx')
                movie = pd.Series(MOVIE, name='i')
                movies = movies.append(movie, ignore_index=True)
                movies.to_excel('./movie.xlsx')
    
    
    if __name__ == "__main__":
        spider()
    
    
  • 您还可以看一下 曾贤志老师的【曾贤志】用Python处理Excel数据 - 第1季 基础篇课程中的 5.3 列表的增加、删除、修改小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我对Python中Excel表格的处理不是特别熟悉,不过我可以按照要求提供以下方法尽可能地解决这个问题:

    首先需要导入pandas模块,因为Pandas支持大多数的Excel表格功能且数据分析能力很强。那么如何安装它呢? 运行pip install pandas即可。

    接下来,将Excel表格读入。Pandas拥有read_excel方法,可以直接读取Excel文件(xlsx, xls等格式)。

    读取Excel文件的方法非常简单。可以直接利用pandas.read_excel()快速读取excel文件,读取excel文件时,可以轻松的指定sheet名,如以下代码中的"Sheet2":

    import pandas as pd df_new = pd.read_excel(r'./test.xls', sheet_name='Sheet2') print(df_new)

    但是,读取这种表格中的未命名的列索引,需要用到Pandas的一些高级操作。参考这个链接,使用MultiIndex数据格式就是解决这个问题的好方法。当Pandas读取一个没有列名的Excel文件时,将自动赋值一些虚拟列名(A,B,C等等)。你是否想过可以取出这些虚拟列名,并将它们变成一个多层索引呢?这样就可以即保留数据,又可以用一个合理的方式解决未命名的列索引的问题。

    具体步骤如下:

    1.读取Excel文件,将虚拟的列标题存储在multiIndex对象中。

    2.删除所有空的行。

    3.转置整个DataFrame.

    4.重置multiIndex,将它变成一个正常的列,而不是索引。

    这是一个完整的例子如下所示: 我假定这个未命名的列索引在第二行之后,它的值为"key1,key2,key3"。

    import pandas as pd df = pd.read_excel(r'File.xlsx') cols = pd.MultiIndex.from_tuples([(x, y) for x in df.columns[2:] for y in ['key1', 'key2', 'key3']]) df.columns = pd.Index(['First', 'Second']).union(cols) df = df.dropna(how='all') df = df.T.reset_index(level=1, drop=True).T

    这段程序不是特别容易懂,需要花一些时间理解,但是一旦你懂了,你就知道如何把多维无序的数据转换为带有规律格式的数据。我认为这种方案是处理这个问题的最佳方法,因为它不仅适用于这个特定的例子,而且也适用于其他一些可能包含多维数据的情况。

    至于如何将转换后的Excel表格通过Python添加到字典中,只需要使用Pandas来完成,它具有很强的操作数据的能力。你可以将DataFrame格式化成字典格式(dict),并将'First'作为键名,将其他的值作为值:

    dict_excel=df.to_dict('list')

    如果你使用了类似上面的代码,作为结果将产生一个所有数据都清晰可见的字典。