操作超大电子表格不再难!快速读取数据技巧大揭秘

问题

哎哟,每周都被电商平台的那些巨大CSV电子表格折磨得头疼不?别担心,小编来给你支招啦!这些表格动不动就超过两百万条数据,用电脑上的Office软件打开,简直就像在看一部超长预告片,还得等上个5分钟,而且只能看到一半的内容,分分钟还可能给你玩个“崩溃大礼包”,让人欲哭无泪。
在这里插入图片描述
但其实呢,我们真正关心的,只是那些跟咱们公司产品有关的关键词数据,其他的都是“打酱油”的。想想看,每次打开这些大山一样的文件,我们是不是都在浪费时间,去找那么几颗“珍珠”?

好消息是,我们有秘密武器——Python!用Python程序脚本搞定这个任务,既高效又省心。所以,下次当这些“数据巨无霸”又来找麻烦时,别忘了我们的脚本小能手,让它帮你轻松筛选出那些关键信息,让你的工作效率像坐火箭一样飙升!

分析问题

好啦,咱们来轻松搞定这个任务!其实就是“读取-筛选-保存”这么简单。不过呢,这些文件有点儿特别,数据多得像银河里的星星,一打开office软件,它就得全部加载完才能动弹,再加上那些花哨的图形界面和工具,内存一下就不够用了,电脑小脸一蓝,直接给你来个“死机表情包”。

但咱们有高招儿——脚本程序!这小家伙儿不用图形界面,轻装上阵,直接从电子表格里抓数据,又快又省心。最神奇的是,它还能挑着读取数据,不用一股脑儿全塞进内存,这样一来,电脑就不会因为“吃太多”而闹脾气了。详细流程图如下:
在这里插入图片描述

代码实现

1.分批读取数据

第一件事情,根据输入的文件夹地址,遍历里面的文件,找到所有CSV表格,然后读取数据。由于是大文件数据,因此不能一次性全部读取,借助skiprows和nrows参数能够控制读取数据量,第一个是跳过的数据行数,第二个是读取数据行数。比如第一次读取五万行,则skiprows=0和nrows=50000,第二个五万行,skiprows=50000,nrows=100000,依此类推可以分批全部读取,例子代码如下。


# 当前文件夹路径
current_directory = os.path.dirname(os.path.abspath(__file__))
res_df = pd.DataFrame()
print("正在搜索文件夹:", current_directory)
for file in os.listdir(current_directory):
    if file.split(".")[-1] == "csv":
        data_file_path = os.path.join(current_directory, file)
        step = 5e4  # 科学记数法 50000
        max_row = 1e6  # 一百万
        row_number = 1  # 本文档第一行没有用途,直接跳过
        # 读取文件,由于文件较大,skiprows代表忽略行数,nrows可以指定获取数据行数
        while row_number < max_row:
            df = pd.read_csv(data_file_path, encoding="gbk", skiprows=row_number, nrows=row_number+step)
            # 暂时不进行数据处理
            print(df.head())
            row_number += step
            print(row_number, step)
            # 读取小量数据调试,这里循环一次就结束,正确后再读取全部数据
            row_number += step

### 输出 #######
正在搜索文件夹: D:\PythonProjects\自动化书代码用例\第四章-数据分析\4-9-电商关键词
   搜索频率排名                                  搜索词  ... 点击量最高的商品 #3:转化份额       报告日期
0       1         valentines day gifts for her  ...             0.97  2022/2/12
1       2         valentines day gifts for him  ...             1.89  2022/2/12
2       3  valentines cards for kids classroom  ...             0.88  2022/2/12
3       4                              reacher  ...             0.00  2022/2/12
4       5        valentines day gifts for kids  ...             1.55  2022/2/12

[5 rows x 21 columns]
50001.0 50000.0

从输出结果得知,数据是按搜索频率排名进行排序,数据越靠前,证明越多用户搜索,相关商品的需求量越大。查看代码,你会发现有一个不常见数值5e4和1e6,这是科学记数法,e后面数字n代表10的n次方,通俗说就是数值后面带多少个0。因此5e4为50000,也就是五万,这样避免输入错误,也能避免阅读代码错误。

注意:调试阶段,不需要把整个文档都读取,因此用了break,正式执行代码需要删掉。

关键数据提取

从上面的结果中发现每一行有21列数据,其中第二列搜索词就是我们筛选关键词的需要比较的数据,因此筛选数据的条件也是在搜索词这一列进行,代码如下。


# 关键词
search_key = "ipad"
# 根据关键词筛选
# 第一种关键词完全一致的数据
df_key = df[df["搜索词"] == search_key]
print(df_key.head())
### 部分结果输出 ####
    搜索频率排名   搜索词 点击量最高的品牌 #1  ... 
21      22  ipad       Apple  ...            

[1 rows x 21 columns]

从输出结果得知,找到一条ipad搜索词的数据。若有多个关键词,可以通过列表保存关键词,然后遍历列表数据,替换search_key便可完成全部关键词的提取工作。

3.汇总数据与保存

使用pd.concat()函数,可以把数据按行合并,最后使用to_csv()把汇总数据输出到电子表格中,具体代码如下。


# 创建一个新的Dataframe数据
res_df = pd.DataFrame()
# 合并数据
res_df = pd.concat([res_df, df_key])
print(read_df)
# 保存为文档
res_df .to_csv("关键词集合.csv")

获取完整代码可以添加微信公众号,回复"超大文件读取"在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值