csv文件操作常用技巧

Excel中删除特定字符前/后的文本

按下CTRL+H组合快捷键,来进入到查找和替换窗口,例如要批量删去所有逗号及之后的字符,输入,*,再点击全部替换,就可以实现;若想实现批量删去AB及之前的所有字符,输入*AB,再点击全部替换。

Excel去除有空缺值的行

先选中目标列,按下Ctrl+G组合快捷键, 然后选择条件为空值,在选中右键删除,选择删除整行,可统一处理数据值中有空缺值的行

使用Excel的宏功能

1.工作需求:(1)大量excel文件需要处理;(2)对这些excel的处理过程一致,只是重复操作。

2.基本原理:(1)使用“宏录制”录制操作,得到代码;(2)将代码填写至构建好的批处理框架中;(3)运行。

实例需求:在1000个空白excel的sheet1中A1单元格都生成[0,1]的随机数,B1得到A1的10倍。(假设1000个空白excel均已经存在)

操作过程:

(1)打开一个空白excel,找到宏,点击“宏录制”,命名为 chuli;【此时excel将记住你的操作并生成相对应的代码chuli】

(2)在A1输入"=rand()",B1输入"=A1*10";【此时excel已经将你的操作生成相对应的代码chuli】

(3)打开宏,点击“停止录制”,再点击“查看宏”,点击“chuli”,再点击“编辑”;【红色框中的代码即为我们在(2)中操作所对应的代码】
image
(4)为宏代码附上批处理代码,将下图右边红色框的代码替换掉左边红框的代码;【使“chuli”这个宏,可以对多个选中的excel进行红色框中的处理,即(2)的处理】
image
image

代码如下

[上半部分]:

Sub chuli()
Dim f, l&, s As Integer
f = Application.GetOpenFilename(fileFilter:="xlsx文件(*.xlsx),*.xlsx", Title:="选择Excel文件", MultiSelect:=True)
If TypeName(f) = "Boolean" Then Exit Sub
For s = 1 To UBound(f)
Workbooks.Open f(s)
Set xlsxBook = GetObject(f(s))
Set Mywantgetsheet = xlsxBook.Worksheets(1)
Mywantgetsheet.Activate

[下半部分]:

xlsxBook.Save
xlsxBook.Close
Next
MsgBox "finsh"
End Sub

(5)得到结果如下,点击“运行”,选择需要进行处理的excel即可。【注意不可选本excel,会出现问题,必须选择其他需要处理的文件,可以多选】
image
(6)处理会自动进行,并保存;如果处理的文件是xls或者csv,则需要在开头和结尾代码处,将“xlsx”改为“xls”或者“csv”即可,注意要改全了。

同样的宏的批处理也可以批量将excel进行格式转化,例如将1000个xlsx转化为csv或者反过来,都很方便。
参考:Excel干货——使用excel的宏功能对多个excel文件进行批量处理

使用cmd命令行合并csv文件

  • 将需要合并操作的csv文件放置在同一文件目录下,将上方文件地址栏上输入cmd打开(或者在文件夹空白处右键“在终端中打开”,设置为命令提示符;或直接Win+R输入cmd,然后输入cd 文件路径
  • 打开cmd命令提示符copy *.CSV all.csv
    image

参考:如何将多个 CSV 文件合并到一个 Excel 工作簿中

VBA将多个excel文件合并为同一文件多个sheet页

1、新建一个文件夹,将需要合并的excel文档复制到该文档目录下
image
2、新建一个EXCEL空白文档,鼠标移动到在sheet工作表上单击右键,选择“查看代码”选项,进入VBA控制台。
image
3、在菜单栏点击“插入”菜单,选择“模块”选项,进入模块编辑界面。
image
4、在编辑框中复制以下代码,注意符号,需是英文状态下。

'功能:把多个excel工作簿的第一个sheet工作表合并到一个excel工作簿的多个sheet工作表,新工作表的名称等于原工作簿的名称
Sub Books2Sheets()
    '定义对话框变量
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    '新建一个工作簿
    Dim newwb As Workbook
    Set newwb = Workbooks.Add
    
    With fd
        If .Show = -1 Then
            '定义单个文件变量
            Dim vrtSelectedItem As Variant
            '定义循环变量
            Dim i As Integer
            i = 1
            
            '开始文件检索
            For Each vrtSelectedItem In .SelectedItems
                '打开被合并工作簿
                Dim tempwb As Workbook
                Set tempwb = Workbooks.Open(vrtSelectedItem)
                '复制工作表
                tempwb.Worksheets(1).Copy Before:=newwb.Worksheets(i)
                '把新工作簿的工作表名字改成被复制工作簿文件名,这儿应用于xls文件,即Excel97-2003的文件,如果是Excel2007,需要改成xlsx
                newwb.Worksheets(i).Name = VBA.Replace(tempwb.Name, ".xlsx", "")
                '关闭被合并工作簿
                tempwb.Close SaveChanges:=False
                i = i + 1
                Next vrtSelectedItem
          End If
      End With
      Set fd = Nothing
End Sub

5、代码输入后,点击菜单项中“运行”,选择“运行子过程”选项,或者按下F5快捷键,运行代码。
image

6、运行代码后,会弹出文档选择界面,找到新建文件夹的路径,选择你所需要合并的文档,选择文档后,点击“确定”,代码开始运行,运行时间视文档数目而定。
image

7、代码段运行结束后,就会出现已经合并完成的excel文档界面,新工作表的名称等于原工作簿的名称,大功告成!
image

参考文章:将多个excel文件合并
为:一个excel文件的多个sheet页【方法技巧】

合并多个Excel sheet页内容到1个sheet页

新建一个Sheet,命名为“All”(名字可随意);右键点击新建Sheet,选择查看代码,或者“Alt+F11”键打开VBA编辑窗口。
将EXCEL中的多个SHEET中内容合并到一个SHEET中
在左侧对应的Sheet“All”上双击,弹出窗口空白处粘贴下面的代码。

Sub hb()
Dim bt, i, r, c, n, first As Long
bt = 1 '表头行数,多行改为对应数值
Cells.Clear
For i = 1 To Sheets.Count
If Sheets(i).Name <> ActiveSheet.Name Then
    If first = 0 Then
        c = Sheets(i).Cells(1, Columns.Count).End(xlToLeft).Column
        Sheets(i).Range("A1").Resize(bt, c).Copy Range("A1")
        n = bt + 1: first = 1
    End If
    r = Sheets(i).Cells(Rows.Count, "A").End(xlUp).Row
    Sheets(i).Range("A" & bt + 1).Resize(r - 1, c).Copy Range("A" & n)
    n = n + r - bt
End If
Next
End Sub

将EXCEL中的多个SHEET中内容合并到一个SHEET中
“F5”键或点击运行菜单,合并成功!

参考文章:合并多个excel sheet页内容到1个sheet页 5秒搞定

csv去除重复项的多种方式

  1. Excel删除重复项
  • 数据选项卡——删除重复项
  • 数据选项卡——筛选高级——在原有区域显示筛选结果——列表区域选中——选择不重复的记录
  • 函数+筛选/排序法
    如对于以下表格中需要去除姓名和性别均重复的项,只保留一项。
    image
    =SUM(N(B$2:B2&C$2:C2=B2&C2))
    通过SUM和N函数将一组逻辑值转化为出现次数的计数,然后再根据进行筛选或排序

2.Python法

  • 读取CSV
import csvwith open('data.csv','r',encoding = 'utf8') as fp:
reader = csv.reader(fp)
for row in reader:
	print(row)

或者使用pandas库:

import pandas as pd #需要导入pandas库
df = pd.read_csv('data.csv')
print(df)
  • 用pandas库的.drop_duplicates函数实现去重
import shutil
import pandas as pd

frame=pd.read_csv('盘符:/路径/example.csv',engine='python')
data = frame.drop_duplicates(subset=['列A','列B'], keep='first', inplace=False)
data.to_csv('E:/output.csv', encoding='utf8')

# subset : column label or sequence of labels, optional 用来指定特定的列,默认None所有列
# keep : {‘first’, ‘last’, False}, default ‘first’ 删除重复项并保留第一次/最后一次/删除所有项
# inplace : boolean, default False 是直接在原来数据上修改还是保留一个副本,True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本

例如:

name sex age
Coco female 7
Lily female 7
Joe female 15
Coco female 7

执行DataFrame.drop_duplicates(subset = None, keep = 'first'),产生的结果如下:

name sex age
Coco female 7
Lily female 7
Joe female 15

若使用代码DataFrame.drop_duplicates(subset = None, keep = 'last'),结果如下:

name sex age
Lily female 7
Joe female 15
Coco female 7

即若不考虑index以及行的顺序,last效果与参数first相同。

若使用代码DataFrame.drop_duplicates(subset = None, keep = False), 则把相同的行全部删除,结果如下:

name sex age
Lily female 7
Joe female 15

所有重复的行都被删除,没有保留。

若使用代码DataFrame.drop_duplicates(subset = ['sex' , 'age'] , keep = False), 结果如下:

name sex age
Joe female 15

参考:[Python]python对csv去除重复行 python 2020.2.11Python 去重csv文件中相同的重复行

将内部结构字段一致的json格式数据转化为csv文件,用Excel无乱码打开并另存为CTF-8格式

# coding=utf-8

import json
import csv

def csv_json():
    // 1.分别 读,创建文件
    json_fp = open("example.json", "r",encoding='utf-8')
    csv_fp = open("example.csv", "w",encoding='utf-8',newline='')

    // 2.提出表头和表的内容
    data_list = json.load(json_fp)
    sheet_title = data_list[0].keys()
    // sheet_title = {"姓名","年龄"}  # 将表头改为中文
    sheet_data = []
    for data in data_list:
        sheet_data.append(data.values())

    // 3.csv 写入器
    writer = csv.writer(csv_fp)

    // 4.写入表头
    writer.writerow(sheet_title)

    // 5.写入内容
    writer.writerows(sheet_data)

    // 6.关闭两个文件
    json_fp.close()
    csv_fp.close()
  
    print("存完了")
if __name__ == "__main__":
    csv_json()

Excel从CSV中导入数据
对于Excel直接打开出现乱码的csv文件,先正常打开一份空白的excel文件,将鼠标定位在第一行第一列,这边鼠标定位的位置将决定后续打开的csv文件在excel中展示的位置,在excel的上方菜单中点击“数据”,如上个步骤截图中标红的数据,页面切换后,点击下图中标红的“ 从文本/CSV ”,在打开的对话框中选中“分隔符号”,在“文件原始格式”中编码选择UTF-8,如下截图中标红所示。设置好之后请点击“下一步”。


再保存为UTF-8编码方式的CSV文件

Vlookup匹配

Vlookup函数

比较 Microsoft Excel 中的列
对于一个数据集,其中 A 列和 B 列都填充了名称,则两列中的相同名称可以显示在 C 列中。例如,如果 Myrtle 位于 A 和 B 中,则 VLOOKUP 可以将该名称放入 C 中。
=IFERROR(VLOOKUP(B2,$A$2:$A$10,1,0),"No Match")
如果想在C列显示两元结果
=IF(ISERROR(VLOOKUP(B2,$A$2:$A$10,1,0)),"No Match","Match")

参考:
如何使用 VLOOKUP 比较 Excel 中的两列
Vlookup跨表两个表格匹配:掌握这12种用法就行了

posted @ 2025-01-05 10:50  洛天一  阅读(270)  评论(0)    收藏  举报