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循环进行遍历每一个单元格