pandas 行数_pandas-老板让拆分三千万行的数据为100个文件,我就用了3行代码

工作中经常遇到需要合并多个文件,但偶尔也需要将一个大文件拆分为小文件,其实这个功能在pandas里面很简单,今天我用2中方法满足你

9dc54e92e532903580852e1b40178f19.png

需求思路分析:

如果要将1个大文件拆分为多个小文件,我的思路是这样的的:

  1. 首先要知道拆分大文件有多少行
  2. 需要将文件拆分为多少行的一个文件
  3. 将文件读取到pandas
  4. 采用iloc来读取
  5. 采用to_csv来保存
  6. 保存的文件名需要在原始的名字上加“_"加文件序列数

难点:

  • 如果是一个不是很大的文件,那pandas可以直接读取
  • 如果是一个超级大的文件,pandas读取就已经把内存用满了
  • 如何建立循环来分批读取和保存文件

实现方法1:iloc

之前我们学过pandas的高性能数据读取,有一个函数iloc就是根据行位置来索引的,今天这个函数正好能排上用场,先复习一下:

iloc

data.iloc[[2,3,4,5],[2,3,4,5]]
829f542de3f13da0becd23511d68292c.png

首先导入需要的库:

#ecoding:utf-8# Created by Administrator at 2018-8-27import pandas as pdimport osfrom tkinter.filedialog import askdirectoryimport tkinter as tkfrom tkinter import filedialog

将数据读取到pandas:

print("请选择文件:")root = tk.Tk()root.withdraw()file_path = filedialog.askopenfilename()df=pd.read_csv(file_path,encoding='gbk')df

设置需要的每个文件的个数:

n=df.shape[0]num=10000file_name=os.path.splitext(os.path.basename(file_path))[0]p=0

n=df.shape[0]:读取文件的总行数

num=10000:设置每个文件的个数

file_name=os.path.splitext(os.path.basename(file_path))[0]:获取导入的文件名

核心代码:

for i in range(0,n,num): p+=1 dd=df.iloc[i:i+num] dd.to_csv("%s_%s.csv"% (file_name,p),encoding="gbk")print("拆分完成!")

重点有三个:

  • iloc读取需要的行数据
  • to_csv保存文件
  • for循环采用步进的方式分块获取需要的行数

实现方法2:chunksize-推荐使用的方法

如果是一个很大很大的文件,全部导入到pandas也是很难的,这个时候我们可以采用read_cav的分块读取功能,将读取的每一块文件分别读取,然后保存,这也是我推荐的方法

首先还是读取文件:

print("请选择文件:")root = tk.Tk()root.withdraw()file_path = filedialog.askopenfilename()df=pd.read_csv(file_path,encoding='gbk',chunksize=10000)file_name=os.path.splitext(os.path.basename(file_path))[0]p=0

chunksize=10000就是设置你需要的每个文件的行数

核心代码:

for d in df: p+=1 d.to_csv("%s_%s.csv"% (file_name,p),encoding="gbk")print("拆分完成!")

有没有很简单,仅仅三行代码就可以完成!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值