Python数据分析之逐块读取文本

 《利用Python进行数据分析》,第6章的数据加载操作read_xxx,有chunksize参数可以进行逐块加载。经测试,它的本质就是将文本分成若干块,每次处理chunksize行的数据,最终返回一个TextParser对象,对该对象进行迭代遍历,可以完成逐块统计的合并处理。文中的示例代码分析如下:

from pandas import DataFrame,Series
import pandas as pd

path='D:/AStudy2018/pydata-book-2nd-edition/examples/ex6.csv'
# chunksize return TextParser
chunker=pd.read_csv(path,chunksize=1000)

# an array of Series
tot=Series([])
chunkercount=0
for piece in chunker:
	print '------------piece[key] value_counts start-----------'
	#piece is a DataFrame,lenth is chunksize=1000,and piece[key] is a Series ,key is int ,value is the key column
	print piece['key'].value_counts()
	print '------------piece[key] value_counts end-------------'
	#piece[key] value_counts is a Series ,key is the key column, and value is the key count
	tot=tot.add(piece['key'].value_counts(),fill_value=0)
	chunkercount+=1

#last order the series
tot=tot.order(ascending=False)
print chunkercount
print '--------------'
print tot

     首先,例子数据ex6.csv文件总共有10000行数据,使用chunksize=1000后,read_csv操作返回一个TextParser对象,该对象总共有10个元素,遍历过程中打印chunkercount验证得到。

     其次,每个piece对象是一个DataFrame对象,piece['key']得到的是一个Series对象,默认的索引是数值索引,值为csv文件中的key列的值,即各个字符串。将每个Series的value_counts作为一个Series,与上一次统计的tot结果进行add操作,最终得到所有块数据中各个key的累加值。

    最后,对tot进行order排序,按降序得到各个key的值在csv文件中出现的总次数。这里很巧妙了使用Series对象的add操作,将两个Series执行add操作,即合并相同key:key相同的记录的值累加,key不存在的记录设置填充值为0。

   输出结果为:


猜你喜欢

转载自blog.csdn.net/wojiushiwo945you/article/details/79257915