精华内容
下载资源
问答
  • python对excel操作大全详解(获取某一列,某一行的值,对某一列信息筛选) 在此使用的包是pandas,因为其可以同时处理xls和xlsx两种excel文件。 使用pd读取有多个sheet的excel pandas读取的常用格式pd.read_excel...

    python对excel操作大全详解(获取某一列,某一行的值,对某一列信息筛选)

    在此使用的包是pandas,因为其可以同时处理xls和xlsx两种excel文件。

    使用pd读取有多个sheet的excel

    pandas读取的常用格式pd.read_excel(file, sheet_name),其中sheetname可以使用数字进行替代,从0开始,默认为0

    pandas写入的格式为data.to_excel('filename',sheet_name='A')

    处理的excel信息如下:

    在这里插入图片描述
    在这里插入图片描述
    代码如下:

    import pandas as pd
    path = 'G:\动力系\新建文件夹\什么.xls'
    data = pd.read_excel(path,None)#读取数据,设置None可以生成一个字典,字典中的key值即为sheet名字,此时不用使用DataFram,会报错
    print(data.keys())#查看sheet的名字
    for sh_name in data.keys():
        print('sheet_name的名字是:',sh_name)
        sh_data = pd.DataFrame(pd.read_excel(path,sh_name))#获得每一个sheet中的内容
        print(sh_data)
        
    
    

    结果:
    在这里插入图片描述

    获得某一行,某一列的值

    pd对excel的相关基本操作看下面的链接

    https://blog.csdn.net/weixin_43245453/article/details/90056884

    数据使用的是第一个sheet

    import pandas as pd
    path = 'G:\动力系\新建文件夹\什么.xls'
    data = pd.DataFrame(pd.read_excel(path))#读取数据,设置None可以生成一个字典,字典中的key值即为sheet名字,此时不用使用DataFram,会报错
    print(data.index)#获取行的索引名称
    print(data.columns)#获取列的索引名称
    print(data['姓名'])#获取列名为姓名这一列的内容
    print(data.loc[0])#获取行名为0这一行的内容
    

    结果:
    在这里插入图片描述

    对某一列的信息进行筛选

    筛选使用的是data.loc[列名称 = 提取的信息]

    假如我要提取院系下面的动力,代码如下:

    import pandas as pd
    path = 'G:\动力系\新建文件夹\什么.xls'
    data = pd.DataFrame(pd.read_excel(path))#读取数据,设置None可以生成一个字典,字典中的key值即为sheet名字,此时不用使用DataFram,会报错
    result = data.loc[data['院系'] == '动力']#获取列明为院系,内容为动力的内容
    print(result)
    

    结果如下:
    在这里插入图片描述

    展开全文
  • pandas 玩转 Excel 操作总结

    千次阅读 多人点赞 2021-03-29 00:07:54
    pandas 操作Excel操作总结 Python 操作Excel操作总结,包括Series和Data Frame的互转、使用pandas读取Excel表格、python读取多个数据表、python合并多个工作表 以及写入Excel文件 pandas是一款基于NumPy的数据分析...

    Python 操作Excel操作总结,包括Series和Data Frame的互转、使用pandas读取Excel表格、python读取多个数据表、python合并多个工作表以及写入Excel文件

    pandas是一款基于NumPy的数据分析工具。它提供了大量的能使我们快捷处理数据的方法。

    数据科学线性代数公式汇总

    在这里插入图片描述

    随笔记录所的所学,此博客为我记录文章所用,发布到此,仅供网友阅读参考。作者:北山啦

    # -*- coding:utf-8 -*-
    # @Address:https://beishan.blog.csdn.net/
    # @Author:北山啦
    


    常用数据类型

    • Series:一维数组,与NumPy中的一维数组相似,和Python自身的list也相似。区别自语Series中的数据只能是一种数据,而list中的数据可以不一样
    • Time-Series:以时间为索引的Series
    • DataFrame:二维的表格型数据结构。经常用于处理Excel表格数据等,这也是我们本节课会重点讲的内容
    • Panel:三维数组(0.25版本后,统一使用xarray,不再支持Panel)

    Series和Data Frame的互转

    • 利用to_frame()实现Series转DataFrame
    • 利用squeeze()实现单列数据DataFrame转Series
    import pandas as pd
    s = pd.Series(["北山啦","关注","点赞"])
    s
    
    0    北山啦
    1     关注
    2     点赞
    dtype: object
    
    s = s.to_frame(name="列名")
    s
    
    列名
    0 北山啦
    1 关注
    2 点赞
    s.squeeze()
    
    0    北山啦
    1     关注
    2     点赞
    Name: 列名, dtype: object
    

    使用pandas读取Excel表格

    在pandas中,读取Excel非常简单,它只有一个方法:readExcel(),但是的参数非常多

    主要常用的参数,我们先对其进行了解:

    • io:一般指定excel文件路径就可以了。也可以是其他Excel读取对象如ExcelFile、xlrd.Book等
    • sheet_name:用于指定工作表(sheet)名称。可以是数字(工作表从0开始的索引)
    • header:指定作为列名的行,默认为0,即第一行为列名。如果数据不含列名,则设为None
    • names:指定新的列名列表。列表中元素个数和列数必须一致
    • index_col:指定列为索引列,默认None指的是索引为0的第一列为索引列
    • usecols:要解析数据的列,可以是int或者str的列表,也可以是以逗号分隔的字符串(pandas 0.24新增功能),例如:”A:F”,表示从A列到F列,”A,C,F”表示A、C、F三列,还可以写成”A,C,F,K:Q”
    • dtype:各列的数据类型,例如:{‘a’: np.float64, ‘b’: np.int32}
    • converters:用于转换各列数据的函数的字典数据,例如:{‘a’: func_1, ‘b’: func_2}
    import pandas as pd
    sheet = pd.read_excel(io="测试数据.xlsx")
    sheet.head()
    
    姓名 年龄 工资
    0 OLIVER. 23 7653
    1 HARRY. 45 8799
    2 GEORGE. 34 9800
    3 NOAH. 54 12880
    4 JACK. 34 3600

    我们先来看一下取回的数据的数据类型是什么。

    print(type(sheet))
    
    <class 'pandas.core.frame.DataFrame'>
    

    可以看到,它就是我们前面提到的DataFrame数据。,直接通过它的列名称来获取即可,比如,要获得所有的工资信息,可以如下:

    print(sheet['工资'])
    
    0      7653
    1      8799
    2      9800
    3     12880
    4      3600
    5      3800
    6      8976
    7     12000
    8      8900
    9      7688
    10     6712
    11     9655
    12     6854
    13     8122
    14     6788
    15     8830
    Name: 工资, dtype: int64
    

    可以看到它的所有的数据都列出来了,并且这一列数据的数据类型是int64,即64位整型。
    得到这一列数据后,我们可以对它进行处理。

    for i in sheet['工资']:
        print(i)
    
    7653
    8799
    9800
    12880
    3600
    3800
    8976
    12000
    8900
    7688
    6712
    9655
    6854
    8122
    6788
    8830
    

    或者将它转换成列表后再处理:

    salaries = list(sheet['工资'])
    print(salaries)
    
    [7653, 8799, 9800, 12880, 3600, 3800, 8976, 12000, 8900, 7688, 6712, 9655, 6854, 8122, 6788, 8830]
    

    计算大家的平均工资:

    sum = 0
    for i in salaries:
        sum += i
        
    print(f"总工资:{sum}")
    ave = sum / len(salaries)
    print(f"平均工资:{ave}")
    
    总工资:131057
    平均工资:8191.0625
    

    我们也可以对求和的方法,使用lambda表达式(匿名函数)结合reduce()函数进行。reduce()函数会对列表、元组等可遍历的元素依次进行运算:将第一个元素和第二个元素进行运算,并将结果和第三个元素进行运算,直到最后一个元素。

    import functools
    sum = functools.reduce(lambda x, y: x + y, salaries)
    print(sum)
    
    131057
    

    我们可以使用read_excel中的usecols参数,通过它指定我们需要读取数据的列,它接收字符串或者整数列表格式的数据,列表中列出我们想要取出数据的列的名称或者索引。

    import pandas as pd
    sheet = pd.read_excel(io="测试数据.xlsx", usecols=[2])
    sheet
    
    工资
    0 7653
    1 8799
    2 9800
    3 12880
    4 3600
    5 3800
    6 8976
    7 12000
    8 8900
    9 7688
    10 6712
    11 9655
    12 6854
    13 8122
    14 6788
    15 8830

    或者:

    import pandas as pd
    sheet = pd.read_excel(io="测试数据.xlsx", usecols=['工资'])
    sheet
    
    工资
    0 7653
    1 8799
    2 9800
    3 12880
    4 3600
    5 3800
    6 8976
    7 12000
    8 8900
    9 7688
    10 6712
    11 9655
    12 6854
    13 8122
    14 6788
    15 8830

    如果想在读取数据的时候,将原来的列的名字改成其他名字,则可以使用names参数指定为其他列名:

    import pandas as pd
    sheet = pd.read_excel(io="测试数据.xlsx", names=['name','age','salary'])
    sheet
    
    name age salary
    0 OLIVER. 23 7653
    1 HARRY. 45 8799
    2 GEORGE. 34 9800
    3 NOAH. 54 12880
    4 JACK. 34 3600
    5 JACOB. 32 3800
    6 MUHAMMAD. 51 8976
    7 LEO. 46 12000
    8 Harper. 42 8900
    9 Evelyn. 38 7688
    10 Ella. 33 6712
    11 Avery. 26 9655
    12 Scarlett. 37 6854
    13 Madison. 41 8122
    14 Lily. 54 6788
    15 Eleanor. 28 8830

    需要注意的是,此时,我们如果要对这个DataFrame进行操作,就需要使用新的列名了。 如果我们想在取出工资数据的时候,以“¥12,345”的格式显示,则可以在获取数据的时候,就指定转换函数:

    import pandas as pd
    def formatsalary(num):
        return f"¥{format(num,',')}"
    
    sheet = pd.read_excel(io="测试数据.xlsx", usecols=['工资'],converters={'工资':formatsalary})
    sheet
    

    在这里插入图片描述

    工资
    0 ¥7,653
    1 ¥8,799
    2 ¥9,800
    3 ¥12,880
    4 ¥3,600
    5 ¥3,800
    6 ¥8,976
    7 ¥12,000
    8 ¥8,900
    9 ¥7,688
    10 ¥6,712
    11 ¥9,655
    12 ¥6,854
    13 ¥8,122
    14 ¥6,788
    15 ¥8,830

    上面通过converters指定了“工资”列,使用formatsalary函数来处理,所以取出来的数据就已经处理过的了。当然,我们也可以取出来后在对其进行格式化。
    其他的参数,大家可以自己进行试验。下面我们再来看一下,假设我要取出所有大于等于8000的工资,该如何进行处理呢?我们可以使用按照条件来获取DataFrame的行数据:

    import pandas as pd
    sheet = pd.read_excel(io="测试数据.xlsx", usecols=['工资'])
    high_salary = sheet[sheet['工资'] >= 8000]
    high_salary
    
    工资
    1 8799
    2 9800
    3 12880
    6 8976
    7 12000
    8 8900
    11 9655
    13 8122
    15 8830

    如果想取得工资大于等于8000小于等于10000的数据:

    import pandas as pd
    sheet = pd.read_excel(io="测试数据.xlsx")
    high_salary = sheet[(sheet['工资'] >= 8000) & (sheet['工资'] <=10000)]
    high_salary
    
    姓名 年龄 工资
    1 HARRY. 45 8799
    2 GEORGE. 34 9800
    6 MUHAMMAD. 51 8976
    8 Harper. 42 8900
    11 Avery. 26 9655
    13 Madison. 41 8122
    15 Eleanor. 28 8830

    如果只想显示符合条件的姓名和工资,则可以通过列表的方式指定要显示的列:

    import pandas as pd
    sheet = pd.read_excel(io="测试数据.xlsx")
    high_salary = sheet[(sheet['工资'] >= 8000) & (sheet['工资'] <=10000)][['姓名','工资']]
    high_salary
    
    姓名 工资
    1 HARRY. 8799
    2 GEORGE. 9800
    6 MUHAMMAD. 8976
    8 Harper. 8900
    11 Avery. 9655
    13 Madison. 8122
    15 Eleanor. 8830

    读取多个数据表

    在上面的例子中,虽然在“测试数据.xlsx”文件中包含了两个数据表(sheet),但它只读取了第一个数据表的内容,如果我想把两个数据表数据都读取出来该怎么办呢?可以指定sheet_name参数,它接收字符串、数字、字符串或数字列表以及None。如果指定为None,则返回所有数据表数据。默认为0,即返回第一个数据表数据。

    import pandas as pd
    sheet = pd.read_excel(io="测试数据.xlsx", sheet_name=[0, 1])
    sheet
    
    {0:            姓名  年龄     工资
     0     OLIVER.  23   7653
     1      HARRY.  45   8799
     2     GEORGE.  34   9800
     3       NOAH.  54  12880
     4       JACK.  34   3600
     5      JACOB.  32   3800
     6   MUHAMMAD.  51   8976
     7        LEO.  46  12000
     8     Harper.  42   8900
     9     Evelyn.  38   7688
     10      Ella.  33   6712
     11     Avery.  26   9655
     12  Scarlett.  37   6854
     13   Madison.  41   8122
     14      Lily.  54   6788
     15   Eleanor.  28   8830,
     1:     姓名  年龄     工资
     0   张三  39  15000
     1   李四  43  16000
     2   李雷  25   6800
     3  韩梅梅  28  23000}
    

    可以看到,得到了两个数据表的数据。此时要得到数据表中的数据,就需要先通过sheet[0]、sheet[1]得到第一个数据表的所有数据,再在这个数据表数据中对数据进行处理了,例如:

    sheet[1]
    
    姓名 年龄 工资
    0 张三 39 15000
    1 李四 43 16000
    2 李雷 25 6800
    3 韩梅梅 28 23000

    如果用的是数据表的名字,则应该写成sheet[‘甲公司’]。
    如果我们想把这两个数据表的数据合并到一起,可以使用pandas中的concat()函数:

    import pandas as pd
    sheet = pd.read_excel(io="测试数据.xlsx", sheet_name=[1, 0])
    st = pd.concat(sheet,ignore_index = True)
    st
    
    姓名 年龄 工资
    0 张三 39 15000
    1 李四 43 16000
    2 李雷 25 6800
    3 韩梅梅 28 23000
    4 OLIVER. 23 7653
    5 HARRY. 45 8799
    6 GEORGE. 34 9800
    7 NOAH. 54 12880
    8 JACK. 34 3600
    9 JACOB. 32 3800
    10 MUHAMMAD. 51 8976
    11 LEO. 46 12000
    12 Harper. 42 8900
    13 Evelyn. 38 7688
    14 Ella. 33 6712
    15 Avery. 26 9655
    16 Scarlett. 37 6854
    17 Madison. 41 8122
    18 Lily. 54 6788
    19 Eleanor. 28 8830

    这里ignore_index的意思是忽略各自的索引,统一使用新的索引。

    合并多个工作表

    多个EXCECL合并到一个工作表中,Python来帮你实现

    # -*- coding:utf-8 -*-
    # @Address:https://beishan.blog.csdn.net/
    # @Author:北山啦
    import pandas as pd
    import os
    path = r"五省PM2.5\archive"
    dfs,index = [],0
    for i in os.listdir(path):
        dfs.append(pd.read_csv(os.path.join(path,i)))
        print(f"正在合并{index+1}工作表")
        index += 1
    df = pd.concat(dfs)
    df.to_csv("数据汇总.csv",index=False)
    
    正在合并1工作表
    正在合并2工作表
    正在合并3工作表
    正在合并4工作表
    正在合并5工作表
    正在合并6工作表
    正在合并7工作表
    

    写入Excel文件

    可以将DataFrame数据写入到一个新的Excel文件中,例如,我们可以将上面合并的两个Excel数据表数据,写入到新的Excel文件中:

    df = pd.DataFrame(st)
    df.to_excel("合并工资报表.xlsx")
    

    这里我们使用DataFrame上的to_excel()方法将数据写入到Excel文件中。它的原型是:to_excel(self, excel_writer, sheet_name=‘Sheet1’, na_rep=’’, float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep=‘inf’, verbose=True, freeze_panes=None),常用的参数说明:

    • excel_writer:需要指定一个写入的文件,可以是字符串或者ExcelWriter对象
    • sheet_name:写入的工作表名称,是一个字符串,默认为’Sheet1’
    • na_rep:当没有数据的时候,应该填入的默认值,默认为空字符串
    • float_format:浮点数格式,默认为None。可以按照float_format="%.2f"这样的方式指定
    • columns:指定写入的列名顺序,是一个列表。
    • header:是否有表头,默认为True,可以是布尔类型或者字符串列表。
    • index:是否加上行索引,默认为True。
    • index_label:索引标签,可以是字符串或者列表,默认为None。
    • startrow:插入数据的起始行,默认为0。
    • startcol:插入数据的其实列,默认0
    • engine:使用的写文件引擎,例如:‘openpyxl’ 、 ‘xlsxwriter’
      当然,我们也可以不限于将一个Excel表中的数据写入到另一个Excel文件,我们自己在程序中运行得到的数据,也可以将其组织成DataFrame后,写入到Excel文件中。
    import pandas as pd
    df = pd.DataFrame({'姓名':['李雷', '韩梅梅', '小明',
                               '张三', '李四', '王五'],
                      '年龄':[31, 22, 30, 49, 38, 33]})
    df.to_excel("员工表.xlsx", sheet_name="202002入职")
    

    看看是不是写入到文件了:

    f = pd.read_excel("员工表.xlsx")
    f
    
    Unnamed: 0 姓名 年龄
    0 0 李雷 31
    1 1 韩梅梅 22
    2 2 小明 30
    3 3 张三 49
    4 4 李四 38
    5 5 王五 33

    可以看到,确实已经写入进去了。
    那如果要写多个数据到一个Excel文件的多个数据表(sheet)中,该怎么处理呢?此时可以使用下面的方法。

    df1 = pd.DataFrame({'姓名':['李雷', '韩梅梅', '小明',
                               '张三', '李四', '王五'],
                      '年龄':[31, 22, 30, 49, 38, 33]})
    
    df2 = pd.DataFrame({'Names': ['Andrew', 'Tomas', 'Larry',
                               'Sophie', 'Sally', 'Simone'],
                       'Age':[42, 37, 39, 35, 29, 27]})
    
    
    
    dfs = {'国内员工':df1, '外籍员工':df2}
    writer = pd.ExcelWriter('Employees.xlsx', engine='xlsxwriter')
    
    for sheet_name in dfs.keys():
        dfs[sheet_name].to_excel(writer, sheet_name=sheet_name, index=False)
        
    writer.save()
    

    看看是不是已经写入到文件了:

    sheet = pd.read_excel(io="Employees.xlsx", sheet_name=None)
    sheet
    
    {'国内员工':     姓名  年龄
     0   李雷  31
     1  韩梅梅  22
     2   小明  30
     3   张三  49
     4   李四  38
     5   王五  33,
     '外籍员工':     Names  Age
     0  Andrew   42
     1   Tomas   37
     2   Larry   39
     3  Sophie   35
     4   Sally   29
     5  Simone   27}
    

    但是仔细看的话,会发现上面的外籍员工这个数据表,字段Names和Age反了,这是因为DataFrame自动按照字母顺序给我们排序了。要避免这种情况,需要在to_excel()中加上columns来指定表头字段顺序:

    df1 = pd.DataFrame({'姓名':['李雷', '韩梅梅', '小明',
                               '张三', '李四', '王五'],
                      '年龄':[31, 22, 30, 49, 38, 33]})
    
    df2 = pd.DataFrame({'Names': ['Andrew', 'Tomas', 'Larry',
                               'Sophie', 'Sally', 'Simone'],
                       'Age':[42, 37, 39, 35, 29, 27]})
    
    
    
    dfs = {'国内员工':df1, '外籍员工':df2}
    cols = {"国内员工":['姓名', '年龄'],"外籍员工":['Names','Age']}  # 指定列名顺序
    writer = pd.ExcelWriter('Employees.xlsx', engine='xlsxwriter')
    
    for sheet_name in dfs.keys():
        dfs[sheet_name].to_excel(writer, sheet_name=sheet_name, index=False, columns = cols[sheet_name])
        
    writer.save()
    

    再来看看现在是否正确:

    sheet = pd.read_excel(io="Employees.xlsx", sheet_name=None)
    sheet
    
    {'国内员工':     姓名  年龄
     0   李雷  31
     1  韩梅梅  22
     2   小明  30
     3   张三  49
     4   李四  38
     5   王五  33,
     '外籍员工':     Names  Age
     0  Andrew   42
     1   Tomas   37
     2   Larry   39
     3  Sophie   35
     4   Sally   29
     5  Simone   27}
    

    现在没问题了。
    还可以使用前面读写文件的时候的with … 这种方式。
    上面的方式,会覆盖原来的文件内容。如果要在原有的Excel表中加上一个新的数据表(sheet),可以通过下面的方式:

    from openpyxl import load_workbook
    book = load_workbook("Employees.xlsx")  # 加载原有的数据到Workbook
    
    df3 = pd.DataFrame({'Names': ['Judy'],
                       'Age':[27]})
    
    with pd.ExcelWriter('Employees.xlsx',
                        engine='openpyxl') as writer:  
        writer.book = book  # 让writer加入原来的两个workbook
        df3.to_excel(writer, sheet_name='候补员工', index=False, columns=['Names', 'Age'])
        writer.save()
    
    import pandas as pd
    sheet = pd.read_excel(io="Employees.xlsx", sheet_name=None)
    sheet
    
    {'国内员工':     姓名  年龄
     0   李雷  31
     1  韩梅梅  22
     2   小明  30
     3   张三  49
     4   李四  38
     5   王五  33,
     '外籍员工':     Names  Age
     0  Andrew   42
     1   Tomas   37
     2   Larry   39
     3  Sophie   35
     4   Sally   29
     5  Simone   27,
     '候补员工':   Names  Age
     0  Judy   27}
    

    可以看到,在原来的Excel文件中,已经加入了“候补员工”这个数据表。加入需要在某个数据表中加入数据(append),可以使用下面方式:

    from openpyxl import load_workbook
    book = load_workbook("Employees.xlsx")  # 加载原有的数据到Workbook
    
    df4 = pd.DataFrame({'Names': ['Moore'],
                       'Age':[38]})
    
    with pd.ExcelWriter('Employees.xlsx',
                        engine='openpyxl') as writer:  
        writer.book = book  # 让writer加入原来的3个workbook
        writer.sheets = {ws.title: ws for ws in book.worksheets}
        start_row = writer.sheets['候补员工'].max_row
        df4.to_excel(writer, sheet_name='候补员工', index=False, columns=['Names', 'Age'], startrow=start_row,header=False)
        writer.save()
    

    这里的要点是:使用startrow指定要插入数据的文字,这里还要注意我们是往某个已经存在的数据表插入数据,所以要指定正确的sheet_name,还有就是为了避免重复的表头,将header设置成False。

    import pandas as pd
    sheet = pd.read_excel(io="Employees.xlsx", sheet_name=None)
    sheet
    
    {'国内员工':     姓名  年龄
     0   李雷  31
     1  韩梅梅  22
     2   小明  30
     3   张三  49
     4   李四  38
     5   王五  33,
     '外籍员工':     Names  Age
     0  Andrew   42
     1   Tomas   37
     2   Larry   39
     3  Sophie   35
     4   Sally   29
     5  Simone   27,
     '候补员工':    Names  Age
     0   Judy   27
     1  Moore   38}
    

    在这里插入图片描述

    到这里就结束了,如果对你有帮助,欢迎点赞关注评论,你的点赞对我很重要。
    在这里插入图片描述

    展开全文
  • 目录目标问题原始数据最终输出代码内容知识点储备遍历文件概述参数实例注意:excel操作excel读操作注意:代码示例excel 写操作数据处理处理末尾的换行符文件名去重 目标问题 本文中主要是将相同后缀的多个文件合并到...

    目标问题

    本文中主要是将相同后缀的多个文件合并到excel中,通过此思路可以解决:

    • 完成不同类型的文件向excel的操作。
    • 完成不同sheet的excel操作。

    原始数据

    1. 文件夹内容
    文件内容
    2. 单个文件内容,以14.G1125为例
    数据结构

    最终输出

    1 最终效果
    以站点命名的数据集合
    2 单个文件内容
    说明:相同站点放到同一个excel中,不同日期放到不同的sheet中。
    相同站点放到同一个excel中,不同日期放到不同的sheet中。

    代码内容

    import os
    import xlwt
    '''
    Author:zflyee
    思路:
    1. 先对所有文件名进行收集并切分后去重
    2. 再找到所有后缀文件名的路径
    3. 做循环读入数据,同一个excel的不同sheet里面
    '''
    # 获取所有的文件后缀名
    def file_name(file_dir):
        name_suffix=[] # 创建文件后缀列表
        file_path=[]   # 创建文件路径空列表
        for root, dirs, files in os.walk(file_dir): # 遍历文件,返回一个三元组
            # 获取文件所有路径
            for file in files:
                file_path.append(os.path.join(root,file)) # 拼接文件路径
                L=file.split('.')[1]                      # 得到文件的后缀
                if L not in name_suffix:                  # 去重
                    name_suffix.append(L)
        return file_path,name_suffix                      # 返回文件名路径与后缀路径
    
    def main():
        ## 汇总同后缀名文件
        dir_path='W:\Solar Radiation\Data\Data_original\Temp_data\秒级数据' # 设置文件路径
        File_Path,Name_Suffix=file_name(dir_path) #得到所有文件名的路径 和 后缀名的列表
        # print(Name_Suffix)
        ## 进行数据处理
        for upfile in Name_Suffix: # 遍历所有后缀
            res_path=r'W:\Solar Radiation\Data\Data_original\Temp_data\res/'+upfile+'.xls' #以后缀为文件名,然后设置文件输出路径
            DataWriter=xlwt.Workbook(style_compression=0) # 创建一个excel
            for file in File_Path: # 遍历所有文件路径
                data_name = os.path.basename(file).split(sep='.')[0]  # 得到每个数据文件的名称
                data_suffix = os.path.basename(file).split(sep='.')[1] # 得到每个数据文件的后缀
                # 核心部分
                if data_suffix==upfile: # 对比数据文件后缀与列标中的后缀
                    sheet = DataWriter.add_sheet(data_name, cell_overwrite_ok=True) # 在打开的excel中增加数据文件的sheet
                    f=open(file, encoding='utf-8') # 读取单个文件,注意转码
                    lines=f.readlines()            # 读取内容,常规操作
                    i=0                            # 这里设置单元格的“行”
                    for line in lines:             # 读取每一行数据
                        line=line.strip('\n')      # 去掉每行末尾的转行符
                        # print(line)              # 为了有安全感,可以选择打印
                        # 下面偷了个懒,读者可以根据实际需要写入不同的列!
                        sheet.write(i,0,line)      # 将每一行数据写入到excel的第i行,第1列中(python中,是从0开始计数的),可以
                        i+=1                       # 设置下一行
                    f.close()                      # 关闭文件
            DataWriter.save(res_path)              # 保存写完的excel
    if __name__ == '__main__':
        main()  
    

    知识点储备

    下面是我在处理过程中用到的主要知识点,仅供参考~

    遍历文件

    概述

    os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。
    os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。
    在Unix,Windows中有效。
    语法
    walk()方法语法格式如下:

    os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
    

    参数

    • top – 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)
      – root 所指的是当前正在遍历的这个文件夹的本身的地址
      – dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
      – files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
    • topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
    • onerror – 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。
    • followlinks – 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。

    实例

    #!/usr/bin/python# -*- coding: UTF-8 -*-import osfor root, dirs, files in os.walk(".", topdown=False):for name in files:print(os.path.join(root, name))for name in dirs:print(os.path.join(root, name))
    

    注意:

    在一个目录下面只有文件,没有文件夹,这个时候可以使用os.listdir

    在我们的桌面上有一个file目录(文件夹),里面有三个文件
    file(dir)|
    –|test1.txt
    –|test2.txt
    –|test3.txt
    用下面的程序获得文件的绝对路径:

    import os
    path = r'C:\Users\Administrator\Desktop\file'
    for filename in os.listdir(path):
        print(os.path.join(path,filename))
    

    使用os.listdir读取到一个目录下面所有的文件名,然后使用os.path.join把目录的路径和文件名结合起来,就得到了文件的绝路路径,结果如下:

    C:\Users\Administrator\Desktop\file\test1.txt
    C:\Users\Administrator\Desktop\file\test2.txt
    C:\Users\Administrator\Desktop\file\test3.txt
    

    excel操作

    excel读操作

    功能:读取一个excel里的第2个sheet,将该sheet的内容全部输出。

    #coding=utf8
    import xlrd
    
    def read_excel():
        workbook = xlrd.open_workbook('demo.xlsx')
        sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始
        rowNum = sheet2.nrows
        colNum = sheet2.ncols
        
        llst = []
        for i in range(rowNum):
            lst = []
            for j in range(colNum):
                lst.append(sheet2.cell_value(i, j))
            llst.append(lst)
    
        for i in range(rowNum):
            for j in range(colNum):
                print(llst[i][j],'\t\t',)# 这里的逗号是为了不让换行
            print
    
    if __name__ == '__main__':
        read_excel()
    

    注意:

    1. python对于缩进非常严苛。如果最后两句话不小心向后缩进了一下,与17行的for对齐了,那说明这两句话是read_excel函数体内部的。那就乱套了。
    2. 指定一个excel里的具体哪一个sheet,即可以按序号顺序来定位(比如第一个sheet,第2个sheet),也可以按名字来找(比如第2个sheet如果名字叫‘Sheet2’的话,就用workbook.sheet_by_name('Sheet2')来定位sheet。
    3. 获取一个cell里面的内容,可以有多种方式,比如:
      sheet2.cell_value(1,0)
      sheet2.row(1)[0].value
      sheet2.cell(1,0).value
    4. 读取到的excel的表格里的值都是unicode模式的。这种情况下如果想正确输出的话,直接print就可以。比如放在list里面,依次对list的每个元素进行print。但是不能直接print lst。这样的话打出来还是unicode的形式。正常情况下对于unicode的对象,用encode可以将一个unicode对象转换为参数中编码格式的普通字符。这一部分可参考 了解Unicode

    代码示例

    情景:读取原始excel内容并打印出来
    在这里插入图片描述

    #coding=utf8
    import xlrd
    
    def read_excel():
        # 打开文件
        workbook = xlrd.open_workbook('demo.xlsx')
        # 获取所有sheet
        #print workbook.sheet_names() # [u'Sheet1', u'Sheet2']
        sheet2_name = workbook.sheet_names()[1]
    
        # 根据sheet索引或者名称获取sheet内容
        sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始
        sheet2 = workbook.sheet_by_name('Sheet2')
    
        # sheet的名称,行数,列数
        print 'sheet的名称,行数,列数'
        print sheet2.name,sheet2.nrows,sheet2.ncols
        
        rowNum = sheet2.nrows
        colNum = sheet2.ncols
        # 获取整行和整列的值(数组)
        rows = sheet2.row_values(3) # 获取第四行内容
        cols = sheet2.col_values(2) # 获取第三列内容
        print '第四行:'
        print rows
    
        llst = []
        for i in range(rowNum):
            lst = []
            for j in range(colNum):
                lst.append(sheet2.cell_value(i, j))
            llst.append(lst)
    
        for i in range(rowNum):
            for j in range(colNum):
                print llst[i][j],'\t\t',
            print
    
    if __name__ == '__main__':
        read_excel()
    

    输出
    在这里插入图片描述

    excel 写操作

    #coding=utf8
    '''
    设置单元格样式
    '''
    import xlwt, xlrd
    
    def set_style(name,height,bold=False):
        style = xlwt.XFStyle()  # 初始化样式
    
        font = xlwt.Font()  # 为样式创建字体
        font.name = name # 'Times New Roman'
        font.bold = bold
        font.color_index = 4
        font.height = height
    
        # borders= xlwt.Borders()
        # borders.left= 6
        # borders.right= 6
        # borders.top= 6
        # borders.bottom= 6
    
        style.font = font
        # style.borders = borders
    
        return style
    
    
    #写excel
    def write_excel():
        f = xlwt.Workbook() #创建工作簿
    
        '''
        创建第一个sheet:
            sheet1
        '''
        sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet
        row0 = [u'业务',u'状态',u'北京',u'上海',u'广州',u'深圳',u'状态小计',u'合计']
        column0 = [u'机票',u'船票',u'火车票',u'汽车票',u'其它']
        status = [u'预订',u'出票',u'退票',u'业务小计']
    
        #生成第一行
        for i in range(0,len(row0)):
            sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))
    
        #生成第一列和最后一列(合并4行)
        i, j = 1, 0
        while i < 4*len(column0) and j < len(column0):
            sheet1.write_merge(i,i+3,0,0,column0[j],set_style('Arial',220,True)) #第一列
            sheet1.write_merge(i,i+3,7,7) #最后一列"合计"
            i += 4
            j += 1
    
        sheet1.write_merge(21,21,0,1,u'合计',set_style('Times New Roman',220,True))
    
        #生成第二列
        i = 0
        while i < 4*len(column0):
            for j in range(0,len(status)):
                sheet1.write(j+i+1,1,status[j])
            i += 4
    
        f.save('demo1.xls') #保存文件.这里如果是.xlsx的话会打不开。
    
    if __name__ == '__main__':
        #generate_workbook()
        #read_excel()
        write_excel()
    

    注意:最终生成的文件如果是demo1.xlsx的话打不开,.xls就没问题。
    如果对一个单元格重复操作,会引发error。所以在打开时加cell_overwrite_ok=True解决
    table = file.add_sheet('sheet name',cell_overwrite_ok=True)

    生成的demo1.xls效果如下。
    ​​在这里插入图片描述

    数据处理

    处理末尾的换行符

    程序如下:

    for line in file.readlines():
        line=line.strip('\n')
    

    使用strip()函数去掉每行结束的\n

    strip()函数原型

    声明:s为字符串,rm为要删除的字符序列

    s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符

    s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符

    s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符

    注意:

    当rm为空时,默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')

    文件名去重

    方案一:通过列表去重
    情况:读取同一个文件夹下所有相同的后缀名,原始文件如下
    文件是以不同站点名做后缀,目的是为了得到所有后缀的集合。

    def file_name(file_dir):
        name_suffix=[]
        file_path=[]
        for root, dirs, files in os.walk(file_dir): # 改
            # 获取文件所有路径
            for file in files:
                file_path.append(os.path.join(root,file))
                L=file.split('.')[1]
                if L not in name_suffix:
                    name_suffix.append(L)
        return file_path,name_suffix
    

    这是最后数据的后缀名集合

    ['G1125', 'G1132', 'G1143', 'G1145', 'G1179', 'G1189', 'G3526', 'G3536', 'G3544', 'G3555', 'G3561', 'G3567', 'G3636', 'G3726', 'G3779']
    

    方案二:通过集合去重
    思路是通过将其他类型的数据变成集合,利用集合的元素唯一性来去重

    展开全文
  • C# Excel 操作

    千次阅读 2019-04-09 16:56:16
    C# Excel 操作 C# 使用自带Microsoft.Office.Interop.Excel简单操作Excel文件 https://www.cnblogs.com/xifengyeluo/p/8276477.html Visual Studio 进行Excel相关开发,Microsoft.Office.Interop.Excel.dll库...

    C# Excel 操作

     

    C# 使用自带Microsoft.Office.Interop.Excel简单操作Excel文件

    https://www.cnblogs.com/xifengyeluo/p/8276477.html

     

    Visual Studio 进行Excel相关开发,Microsoft.Office.Interop.Excel.dll库

    https://www.cnblogs.com/arxive/p/5786241.html

     

     

     

    C#读取Excel 几种方法的体会

    https://www.cnblogs.com/itzhanghb/articles/4550880.html

    OleDb: 用这种方法读取Excel速度还是非常的快的,但这种方式读取数据的时候不太灵活,不过可以在 DataTable 中对数据进行一些删减修改

     

     

    C#读取Excel文件

    https://www.cnblogs.com/villa/p/3140610.html

    二 将工作表Sheet1的内容读取到DataSet

    "select * from [Sheet1$]"

     

    五 也许你并不想读取整个excel的内容

    如果只想读取前两列可以用:select * from [Sheet1$A:B]

    如果只想读取A1到B2的内容,就用:select * from [Sheet1$A1:B2]

     

     

    OleDbDataAdapter

    https://blog.csdn.net/zac_sian/article/details/51161563

     

    OleDbDataAdapter 充当 DataSet 和数据源之间的桥梁,用于检索和保存数据。OleDbDataAdapter 通过以下方法提供这个桥接器:使用 Fill 将数据从数据源加载到 DataSet 中,并使用 Update 将 DataSet 中所作的更改发回数据源。

     

     

     

     

    展开全文
  • 使用PhpSpreadsheet导入&amp;amp;导出Excel,通用方法。适用各种Excel操作场景!
  • 除了使用xlrd库或者xlwt库进行对excel表格的操作读与写,而且pandas库同样支持excel操作;且pandas操作更加简介方便。 首先是pd.read_excel的参数:函数为: pd.read_excel(io, sheetname=0,header=0,skiprows=...
  • C语言对Excel操作

    千次阅读 2017-08-06 00:07:20
    C语言对Excel操作
  • python中使用pyexcel操作excel方法

    千次阅读 2017-08-03 18:15:38
    python中使用pyexcel操作excel方法 安装:pip install pyexcel 理解pyexcel中 book ,sheet,record的关系 pyexcel中 book ,sheet,record的关系 book是一本书,sheet是书里的一页,record是页面上的记录。所以在excel...
  • Python最详细的Excel操作方式,你值得拥有!

    万次阅读 多人点赞 2019-02-23 19:26:16
    在机器学习模型的建立中,不得不借助于Excel强大的统计分析能力,这个时候就牵涉到了如何将python直接处理得到的数据存入excel表格当中以及获取表格的数据进行分析,简单的说,学会使用Python操作Excel文件后,可以...
  • 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Excel操作,接触Excel后发现他的api说明并不多,好在网上有很多朋友贴出了一些代码,我在不断的挫折中吸取了很多教训,现共享出
  • python xlwt写入excel操作

    千次阅读 2019-06-10 11:31:32
    python xlwt写入excel操作 安装 $ pip install xlwt 例子: import xlwt # 创建一个workbook 设置编码 workbook = xlwt.Workbook(encoding = 'utf-8') # 创建一个worksheet worksheet = workbook.add_sheet('...
  • excel的相关操作excel操作实现获得excel下所有sheet名字和个数 excel操作 实现获得excel下所有sheet名字和个数 def count_excel_sheet(excel_path): wb = xlrd.open_workbook(excel_path)#打开excel,excel_path 是...
  • LabwindowsCVI Excel操作说明及事例

    千次阅读 2019-02-02 15:46:36
    本章将介绍LabwindowsCVI对Excel操作的支持。LabwindowsCVI 对excel的支持是基于 windows的excel库,简单点说就是对windows的excel库进行了一层封装,这样我们就能更好的操作excel了。下面将介绍操作Excel的常用API...
  • Excel操作:制作to do list

    千次阅读 2020-03-22 15:22:33
    Excel操作:制作to do list **案例:**根据以下表格制作to do list,并形成完成比例与未完成比例及图表 操作步骤如下: 选中D4单元格,打开开发者工具,插入“复选框”; 右键单击“复选框”选中,再次单击右键-...
  • 使用BasicExcel操作Excel

    千次阅读 2015-05-27 10:32:16
    摘要:这个类是国外人写的一个操作Excel类,应该说比较好用,虽然对中文的支持不够好,但经过转码后使用起来还是非常不错的。下给大家介绍一下:  此类总共包含4个类文件分别是:BasicExcel.hpp,BasicExcel.cpp,...
  • Python实战小程序——Excel操作

    千次阅读 2017-01-24 14:52:07
    Python中的Excel操作  python中的xlrd和xlwt两个模块可以对Excel进行各项操作。   第一步:安装模块的方法:  1.下载一个ez_setup.py的文件https://pypi.python.org/pypi/setuptools,用来安装easy_install的;...
  • 最近入职培训,接受了一些企业文化的洗脑课,不过也有一些是很有实际应用的课程,比如excel操作和技巧,现将自己觉着很有用的地方总结如下:1、基础性操作与技巧说在前面:一个好的工作表格,需要主要以下几点 : ...
  • Python进行Excel操作-格式处理和数据排序前言实现1 格式处理2 数据排序3 结果4 代码 前言 紧接上一篇博客[1]。需求:进一步对整理后的数据进行排序,并且输出格式化的表格。 实现 1 格式处理 excel表格的格式处理...
  • 本文实例讲述了Python3使用pandas模块读写excel操作。分享给大家供大家参考,具体如下: 前言 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas ...
  • C# winform 开发之Excel操作

    千次阅读 2017-01-17 16:55:32
    C# winform 开发之Excel操作(一)------打开Exce表 在开始之前,先要导入Excel的类库。步骤如下: 把鼠标移动解决方案---->右击----->选择“添加引用”---->会出现一个对话框---->选择标题为.net的页面----->...
  • excel的写入函数为pd.DataFrame.to_excel();必须是DataFrame写入excel, 即Write DataFrame to an excel sheet。 to_excel(self, excel_writer, sheet_name='Sheet1', na_rep='', float_format=None,columns=None...
  • EXCEL操作替换单元格中的Alt+Enter

    千次阅读 2016-06-12 09:31:21
    EXCEL操作替换单元格中的Alt+Enter 1:选中要替换的列 2:Ctrl+F 3:上面的输入框输入:Ctrl+J(按键) 4:下面输入要替换的符号
  • 方法如下:  ///  /// Microsoft.Office.Interop.Excel 操作excel到Datatable中  ///  public System.Data.DataTable GetEx
  • VS2010/MFC 利用OLE读写excel操作时,手动打开其他excel文档程序崩掉的问题解决
  • 近期和朋友小A聊天的时候,总是听小A说工作越来越烦,有大量的Excel表格需要分析整理 ~~~,需要总结各种数据,做统计汇总之类,@#¥%%~~。像我等懒人,是不能容忍做大量重复性工作的。以懒人的观点来看,凡重复性的...
  • 火山移动完整Excel操作(带增删改查)开源      火山移动完整Excel操作(带增删改查)开源 http://www.c0ks.com/thread-5578-1-1.html (出处: 编程论坛)  
  • C#EXCEL操作大全

    万次阅读 2015-06-19 19:48:53
    网页导出EXCEL,调用该方法 前台会下载EXCEL /// /// Excle导出数据 /// /// 类对象 /// 对象数据 /// 类字段,字段对应列名 /// excel表名 public void OutExcel(List list, Dictionary column,...
  • 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Excel操作,接触Excel后发现他的api说明并不多,好在网上有很多朋友贴出了一些代码,我在不断的挫折中吸取了很多教训,现共享出来,给大家...
  • ExcelWriter这个插件有个坑,就是已经设置好的格式是无法更改的,因此,由pandas转成excel的时候,必须将格式清除,尤其是表头的格式,代码如下: import pandas.io.formats.excel pandas.io.formats.excel.header...
  • MyExcel--Excel操作新方式

    千次阅读 2019-04-08 15:10:55
    可生成任意复杂表格:本工具使用迭代单元格方式进行excel绘制,可生成任意复杂度excel,自适应宽度、高度; 零学习成本:使用html作为模板,学习成本几乎为零; 支持常用背景色、边框、字体等...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 238,488
精华内容 95,395
关键字:

excel操作