对大型csv文件进行排序
- 背景
- 惨痛经历
- 1、使用excel打开
- 2、使用pandas中的sort_value()方法
- 解决方法
- end
背景
爬取了1个G左右的json数据,是全国2000个左右城市和地区5-8年以来的每一天的天气信息,然后把它处理成csv文件,就像这样:
处理之后大概有300多MB:
因为是多线程爬的,所以里面的数据并不是按照一个城市一个城市排列,日期也不是一天一天连续的。为了进一步处理分析数据,需要按照城市分割成2000个左右的CSV文件,为了提高效率,就需要先进行一次排序。
惨痛经历
1、使用excel打开
别想了,那自然是打不开的(至少我的电脑打不开),而且可以预计,就算打开也会十分的卡。
2、使用pandas中的sort_value()方法
网上有说使用pandas库的sort_value()方法根据某一列进行排序,但是因为我的数据中大部分是中文数据,所以测试的效果很差,基本相当于没排。但是如果是英文数据的话,这个方法还是不错的。
具体代码(部分):
import pandas as ps
df = ps.read_csv('new.csv',encoding='gb2312')
df = df.sort_values('city')
df.to_csv('output.csv',encoding='gb2312')
解决方法
使用工具EmEditor
网上有版的可以使用,自行搜索下载。
界面
操作
1、打开csv文件。因为是中文界面,就不用多说了。
2、排序。排序的功能栏在这里:
选中一列后,就可以升序或者降序对整个文件排序了,因为文件很大,排序大概花了10秒钟,而且亲测对中文的排序效果很好,完全没有问题。
3、接下来是保存
这一点我觉得是最坑的,因为涉及到了中文编码的问题,千万千万不要点保存或者ctrl+s。
如果直接保存,当时什么问题也没有,还是能正常显示,但是如果你把它关掉重新打开,就会出现编码问题,你的中文部分会全部乱码而且无法修复,如果你的原始文件没有备份,那就惨了。这个问题只出现在原始文件较大的情况,我测试了小文件,好像没有这个问题。但是大文件是有这个问题的,而且每次都会出现,不是偶然现象。
这是这个软件的一个bug,所以强烈建议处理数据之前,先把原始数据备份一遍。正确的姿势是:
点击另存为,然后会这样:
这里的编码是默认的GB2312,因为我写这个CSV的时候用的编码就是GB2312,如果没有默认,要选择这个编码方式,然后再另存一份。这样再打开才不会出现乱码问题。
end
这是我的第一篇博客,不足之处希望大家指正。