python 循环读取表格每次读入N行

Python024

python 循环读取表格每次读入N行,第1张

from itertools import islice

N = 1000000 #每次读入100w行

with open( 'your_File_path','r') as f:

while True:

next_n_lines = list(islice(f,N))

if not next_n_lines: break

#print(str(next_n_lines))

#将每次读入的n行记录转换成DataFrame处理

next_n_lines="".join(next_n_lines)

TESTDATA = StringIO(next_n_lines)

df = pd.read_csv(TESTDATA, sep="\t",header=None,names=['col_1','col_2','col_Name'],dtype=str)

print(df)

time.sleep(1)

(2022.06.21 Tues)

收集整理了Python处理大量数据方法,基于Pandas,Numpy等数据处理工具。

用df的 info 方法并指定 memory_usage='deep' 参数,或使用df的 memory_usage 方法,并指定 deep=True 参数。

在读取数据文件的方法中加入 nrows 参数选择前n行数据读取。

也可以跳过m行之后,读取从m行开始的n行

当然也可以在 skiprows 选项中指定范围,保留headers,即保留列名

可以指定 skiprows 中需要忽略的行,用list或array导入即可。下面是随机

如果在这个指令中忽略 nrows=10 指令,则读取跳过100行之后的所有数据。

预先指定读入的列,缩小加载范围

不同的数据类型占用了不同大小的空间,对于尚未读取的数据,可以提前指定类型( dtype );对于已经读入的数据,通过 astype 方法修改成占空间更小的数据类型。

在读入数据之前,通过字典指定每列对应的数据类型,读入之后按照此类型显示数据。

通过改变数据类型减少空间的案例。修改DataFrame d 中的一列 Sctcd ,注意到该列的数据都是1、2、0,而保存类型是object,果断改成 uint8 ,通过 df.info(memory_usage='deep') 方法对比内存的使用情况。仅仅修改了一个列的类型,数据大小减小3MB。

一个特殊而高效的案例是当某一列的值只有有限个,不管是int还是string格式,且该列unque值远小于列的长度,可以将该列转变为 category 类,将节省大量空间。这么做当然也有代价,比如转换成 category 类的数据将无法做max/min等运算,由数字转换成的 category 也不能进行数值运算。这种转换对内存的节省效果显著,下面是对比。 dcol 只有两列, Stkcd 和 Stknme ,查看unique的个数与总长度,显示unique远小于总长度,分别转换为 category 类型,内存节省超过90%!

通过Pandas的 read_csv 方法中的 chunksize 选项指定读取的块大小,并迭代地对读取的块做运算。

1 https冒号//www点dataquest点io/blog/pandas-big-data/

2 CSDN - python 处理大量数据_如何用python处理大量数据

2 How to Work with BIG Datasets on 16G RAM (+Dask), on kaggle

1.打开表格

table = xlrd.open("path_to_your_excel", 'rb')

一般时候需要进行判断,防止表格打开错误

try:

table = xlrd.open("path_to_your_excel", 'rb')

except Exception, e

print str(e)

当表格打开错误时,可以捕获异常

2.一个表格中可以包含多个工作簿

那么需要用到哪个工作簿

python 提供了三种获取方式

sheet1 = table.sheet()[1] or

sheet1 = table.sheet_by_index() or

sheet1 =table.sheet_by_name("sheetname")

3.上一步我们已经获取到具体的sheet(工作簿)

那么根据需求,python提供了获取表格行数列数的方法

获取行数:nrows = sheet.nrows

获取列数:ncols = sheet.cols

返回值type为int

获取列数或行数可能是为了后续需要进行遍历内部的数据而用,那么下面来说python提供可以获取某一行或者某一列值的方法

4.获取某行某列的值

获取某一行的值:

nrow_value = sheet.row_values(number)

获取某一列的值:

ncol_value = sheet.col_values(number)

#上面row_values(number)中的表示想要获取哪一行的索引值,比如获取第一行的值,就是row_values(0)

返回值的type为list

整行整列的数据获取,python给出了直接的方法,那么获取整张表数据呢,就需要用到for循环进行遍历每一个单元格