数据处理:用pandas处理大型csv文件

版权声明: https://blog.csdn.net/ninnyyan/article/details/80999378

在训练机器学习模型的过程中,源数据常常不符合我们的要求。大量繁杂的数据,需要按照我们的需求进行过滤。拿到我们想要的数据格式,并建立能够反映数据间逻辑结构的数据表达形式。
最近就拿到一个小任务,需要处理70多万条数据。

我们在处理csv文件时,经常使用pandas,可以帮助处理较大的csv文件。

pandas 中处理CSV 文件的函数主要为read_csv()to_csv()这两个,其中read_csv() 读取CSV 文件的内容并返回DataFrameto_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()

目前用到的就是这些,之后用到再补充。

拿到数据之后,分析数据之间的逻辑,建立相应的能够表示数据间逻辑关系的数据结构,再进行相应的处理。


学习中,请多指教!

猜你喜欢

转载自blog.csdn.net/ninnyyan/article/details/80999378