python菜鸡的成长足迹--小技巧:合并多个excel文档

心路历程:发现小技巧->尝试->发现问题->试图解决问题->

1.原来read_csv还有这种功能

前几天参加美赛,在数据处理阶段需要合并100+的excel文档,想把这些工作簿都合并到一个工作簿的一个表单里面,我觉得这么麻烦一定有简单的方法(嗯【托腮】),于是去网上查,果然!于是就很happy的开始尝试~


主要看到两种方法,一种用excel自身的代码来合并,操作方法倒是比较简便,但是我尝试了一下,主要有以下 not practical 的地方:

1. 合并速度比较慢。(当时急着要数据,但是等了大概5min左右,还没合并好,而且最终合并还失败了,我还不知道原因。【吐血】)

2. 看不懂代码,没办法根据自己的需求来更改。【嘤嘤嘤】

3. 倒是把所有的工作簿合并到一个excel里面了,但是分成了不同的表单,没办法满足我需要同时处理的需求。【sigh】

第二种就比较厉害了,而且一次合并成功(●'◡'●)。是用python代码实现的。As following:


import pandas as pd

import os

Folder_Path = r'C:\Users\733\Desktop\dataA'          #要拼接的文件夹及其完整路径,注意不要包含中文

SaveFile_Path =  r'C:\Users\733\Desktop\dataA'      #拼接后要保存的文件路径

SaveFile_Name = r'all.csv'              #合并后要保存的文件名

#修改当前工作目录

os.chdir(Folder_Path)

#将该文件夹下的所有文件名存入一个列表

file_list = os.listdir()

#读取第一个CSV文件并包含表头

df = pd.read_csv(Folder_Path +'\\'+ file_list[0])  #编码默认UTF-8,若乱码自行更改

#将读取的第一个CSV文件写入合并后的文件保存

df.to_csv(SaveFile_Path+'\\'+ SaveFile_Name,encoding="utf_8_sig",index=False)

#循环遍历列表中各个CSV文件名,并追加到合并后的文件

for i in range(1,len(file_list)):

    df = pd.read_csv(Folder_Path + '\\'+ file_list[i])

    df.to_csv(SaveFile_Path+'\\'+ SaveFile_Name,encoding="utf_8_sig",index=False, header=False, mode='a+')


代码源自:https://blog.csdn.net/kxw1994/article/details/76465152

我抱着试一试的态度试了一下,哈!好好用,一次成功,运行比较快,不过似乎中间也报错过几次,似乎不能合并不同名称的文档?

2.为什么会报错?

当时为什么会报错以及报的什么错我已经无从考证辽orz,没有存报错记录。但是我可以再模拟一遍当时的过程嘛!

比赛完的今天我决定再试一次,用两种不同名称类型的文档。然而当我仔细地分析了一下语句之后发现,我当时没合并完应该只是下载的数据文件本身的问题。代码是用length来合并的,不可能跟文件名称有关系。但是我二话不说还是拿原来的数据集进行了一波没有什么卵用的实验。

然后,,我发现了一个可怕的事实呜呜呜,我当时急着合并,没有严谨仔细地检查不同经纬度区域的数据的表头,里面从BB后面的数据表头是不一样的。怪不得程序提示我这个:DtypeWarning: Columns (62,63,64,65) have mixed types. Specify dtype option on import or set low_memory=False.不过还好我们用到的那部分数据我当时check了一下发现是一样的。


两种不同文档的表头对比



作为一个好奇宝宝,我开始探索warning的后半部分是什么意思。经过自己的思考和查找,报错的意思是,第(62,63,64,65) 列的数据类型不一致。我去看了下这几列(BJ:BM)的数据类型,发现确实不一致,有0有A,(有int 有char)不过这后几列对我也没用2333,我决定不再管这个数据,去研究一下怎么处理这类情况好啦。

3.如何处理?

Method 1:设置read_csv的dtype参数,指定字段的数据类型

也就是warning里面提示的Specify dtype option。设置方法:dtype={'colname':object}

尝试结果: 我把循环中的语句中的其中一列(63列)的类型改为str,代码见下:

df = pd.read_csv(Folder_Path + '\\'+ file_list[i],dtype={'ICE_OF_LAND_ORIGIN':object})

于是报错就变成了:Columns (62,64,65) have mixed types. Specify dtype option on import or set low_memory=False.说明第63列更改有效~

另外read_csv中其他参数的设置方法可见:

https://zhuanlan.zhihu.com/p/76489045

https://blog.csdn.net/Luckyzhou_/article/details/69062261

Method 2:关闭low_memory模式 ,即设置low_memory=False

原因:

low_memory默认是True,意思是pandas读取csv文件按块读取,这是为了在解析时减少了内存使用。pandas对数据的类型是完全靠猜的,pandas每读取一块数据就对csv字段的数据类型进行猜一次,所以有可能pandas在读取不同块时对同一字段的数据类型猜测结果不一致。

low_memory=False 参数设置后,pandas会一次性读取csv中的所有数据,然后对字段的数据类型进行唯一的一次猜测。这样就不会导致同一字段的Mixed types问题了。

However!这个方法有个致命缺点:一旦csv文件过大,就会内存溢出。so 推荐使用第一种。

4.折腾了很久之后的思考

在看函数的各种参数的过程中我发现自己的python语法知识实在是太...差辽QAQ。明确了我这些天要好好复习一下基础知识,把基础打牢才能上技术炫技吖。

其次就是看函数参数的官方介绍的时候很多地方看得似懂非懂,而且看到英语就产生很不想看进去的感觉,嘤嘤嘤。我还是英语水平太差了,还是得多读读英语多背背单词。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349