pandas 导入、导出数据 – Python量化投资

pandas 导入、导出数据

一、文件读入

我现在读入文件一般只需要用到pd.read_csv() 和pd.read_excel ()以及with…open 三种方法:

pd.read_csv():一般就是读入csv文件的。

pd.read_excel ():一般是读入Excel文件的。

with…open:这种我一般是读入纯文本数据的,比较好用。

但是在文件读入过程中,经常遇到各种各样的问题。现在使用pandas读入的话,我一般会设置下面的几个参数:

encoding:在多次编解码问题导致数据读入失败后,现在一般都会设置为utf-8或者gbk了

usecols:如果不需要读入全部的列,那么这个参数就派上用场了,把自己需要的列以列表的形式放进去就好了。

header:如果数据中没有列名,只是数据的话,那么就需要设置header=None

关于pandas数据读入大家可以参考官方文档https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

我刚入门的时候,刚好赶上年终,需要对一年的数据进行处理,数据量大概有3000万,我的电脑根本跑不了,后来给换了32g的内存,又通过网上各种找办法处理,最后才能在jupyter上完成了分析。贴一下当时的代码。
(感谢frchen,来源https://www.cnblogs.com/frchen/p/5749814.html
)

reader = pd.read_csv('user.csv',encoding='gbk',low_memory=False,iterator=True)
loop = True
chunkSize = 10000000
chunks = []
while loop:
    try:
        chunk = reader.get_chunk(chunkSize)
        chunks.append(chunk)
    except StopIteration:
        loop = False
        print("Iteration is stopped.")
df = pd.concat(chunks, ignore_index=True)

这个就是针对数据量特别大时,用了参数iterator,使用迭代的方式分块把数据导入内存,我设置的是每次导入1000万数据,最后再把这些块concat拼接起来,就是完整的数据了。

二、导出文件
文件导出一般就是pd.to_csv()和pd.to_excel()两种了,这两个没什么说的,就我一般设置的参数也是encoding=’utf-8’和index=False两个了,index=False就是不需要设置索引列。

说一个特别点的,我最近遇到一个文件导出的问题,需要将一张表按照省份分开导出,就是一个省份一个sheet,但是在一个表里面,作为一个小白,我第一次拿到这个数据时,因为数据量并不大,所以我是在Excel里面手动筛选复制粘贴的!!但是第二次拿到的数据就稍微有点大了,这个时候用Excel就不行了,所以自己琢磨用python看行不行。

网上查到可以使用ExcelWriter导出文件,如下:
(感谢fancyq~来源https://blog.csdn.net/fancyq/article/details/80713772

writer = pd.ExcelWriter('test.xlsx')
data1.to_excel(writer,sheet_name='sheet1')
data2.to_excel(writer,sheet_name='sheet2')
writer.save()

但是还有一个问题,我不能手动把每一个省份存为一个df啊,所以这个时候需要for循环了。当然df中的province列不能有null值,否则会报错,建议先将null值填充后再运行以下代码。

writer = pd.ExcelWriter('output.xlsx')
for p in df['province'].unique():
    df.loc[df['province'] == p].to_excel(writer, sheet_name=p)
writer.save()

完美解决~

https://www.jianshu.com/p/49a0da18599d

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论