在训练机器学习模型的过程中,源数据常常不符合我们的要求。大量繁杂的数据,需要按照我们的需求进行过滤。拿到我们想要的数据格式,并建立能够反映数据间逻辑结构的数据表达形式。
最近就拿到一个小任务,需要处理70多万条数据。
我们在处理csv文件时,经常使用pandas,可以帮助处理较大的csv文件。
pandas 中处理CSV 文件的函数主要为read_csv()
和to_csv()
这两个,其中read_csv()
读取CSV 文件的内容并返回DataFrame
,to_csv()
则是其逆过程。
在之前的博客中,曾写过用pandas按照一行一行的方式来读取csv文件的方式,具体可以看这篇链接。Python基础:csv文件的读写(pandas,csv两种方式)
但这样读取的方式,显然比较低效,下面是我自己在处理数据时使用过的一些比较实用的方法。
1.读取限定列
一个csv文件中,往往有很多不同的列,而我们通常只关注其中的某些列,如果把每行都读取出来,再提取信息,显然会增加IO量,因此我们可以在读文件的时候,给定read_csv()
方法的参数,从而提高效率。
file = pd.read_csv('demo.csv',usecols=['column1', 'column2', 'column3'])
在usecols
参数中,给定了要读取的3列,file中则只包含这3列的信息。
2.读取限定行
实际写代码的过程中,往往需要先跑一部分数据进行测试,测试通过后,再处理所有的数据。也可能我们仅仅需要一部分数据进行运算。这时候就可以使用read_csv()
方法中的nrows
参数,设定读取的行数。
file = pd.read_csv('demo.csv',nrows=1000,usecols=['column1', 'column2', 'column3'])
仅读取前1000行数据。
3.分块读取
read_csv()
方法中还有一个参数,chunksize
,可以指定一个chunksize分块大小来读取文件。与直接使用df进行遍历不同的是,它返回的是一个TextFileReader
类型的对象。
reader = pd.read_csv('demo.csv',nrows=10000,
usecols=['column1','column2','column3'],
chunksize=1000,iterator=True)
reader
output:
<pandas.io.parsers.TextFileReader at 0x120d2f290>
4.其他
head()和tail()
拿到一个很大的csv文件后,为了看清文件的格式,可以使用该方法,先查看前10条数据。head()方法默认是10条,也可以用tail()方法查看最后10条数据。
file = pd.read_csv('demo.csv')
df = pd.DataFrame(file)
df.head()
df.tail()
目前用到的就是这些,之后用到再补充。
拿到数据之后,分析数据之间的逻辑,建立相应的能够表示数据间逻辑关系的数据结构,再进行相应的处理。
学习中,请多指教!