前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >for循环太Low?分享几段我工作中经常使用的for代码!

for循环太Low?分享几段我工作中经常使用的for代码!

作者头像
1480
发布2019-07-30 14:44:23
9260
发布2019-07-30 14:44:23
举报
文章被收录于专栏:数据分析1480数据分析1480
前言

不管是for循环还是while循环,都是任何一门语言的基础知识,同时也是非常重要的知识。借助于循环的策略,可以将很多重复性的问题完美地解决。在Python中,大家可能对她的印象是“Python不适合使用循环,因为效率低,速度慢!”,但是本文中将重点介绍她,并跟大家分享我工作常用的几段代码示例(如果你想实操,文末有数据下载链接)。

for循环示意图

可以有部分朋友还不太清楚for循环的工作机制,这里画一个简单的示意图,希望读者能够理解她的逻辑。

如上图所示,图中包含for循环过程中的三个部分,分别是漏斗、漏斗内的元素以及漏斗以下的结构,这三个部分构成了for循环的核心。读者可以将图中的三个核心内容分别理解为容器对象(即Python中的基础数据结构,如字符串、列表、元组和字典等)、容器内的元素以及循环体。上图中,左右两个示意图的唯一区别在于,for循环的循环体是否包含if分支判断。

案例1:多数据文件的合并

如下图所示,本地目录内包含需要读取的多个数据文件,它们均为csv格式或txt格式,且数据结构相同。该如何基于Python的for循环语句实现数据的读取与合并呢?

# 导入第三方模块
import pandas as pd  # 用于读取数据
import os   # 用于返回目录内的文件名称

# 指定待读取数据所在的目录
path = r'D:\datas'
# 构造空列表datas,用于存储所有文件的数据
datas = []
for filename in os.listdir(path):
    # 判断文件类型是否为txt格式
    if filename.find('txt') != -1:
        # 读取txt格式的数据
        data = pd.read_csv(path + '\\' + filename, sep = '\t')
    else:
        # 读取csv格式的数据
        data = pd.read_csv(path + '\\' + filename)
    # 将读取的每一个数据集存储到datas列表中
    datas.append(data)

# 将所有数据文件做合并
final_data = pd.concat(datas)
final_data
案例2:数据单位的统一处理

如下图所示,数据集中关于APP的下载量和软件大小涉及到不同的数据单位,如APP的文件大小有KB单位也有MB单位。很显然,单位不一致的数据肯定是不能直接用来分析和建模的。所以,该如何借助于for循环的手段将数据做一致性的清洗呢?

# 读取数据
apps = pd.read_excel('apps.xlsx')

# 处理安装量字段install,将数据统一为“万”的单位
install_new = []
for i in apps['install']:
    # 判断安装量是否已“亿”为单位
    if i.find('亿') != -1:
        install_new.append(str(float(i[:-1])*10000) + '万')
        # 判断安装量是否已“万”为单位
    elif i.find('万') != -1:
        install_new.append(i)
    else:
        install_new.append(str(int(i)/10000) + '万')

# 将install_new转换为序列对象,并替换数据集apps内原始字段install的值
apps['install'] = pd.Series(install_new)

# 处理软件大小size,将数据统一为“MB”的单位
size_new = []
for i in apps['size']:
# 判断软件大小是否已“KB”为单位
    if i.find('KB') != -1:
        size_new.append(str(round(float(i[:-2])/1024,2)) + 'MB')
    else:
        size_new.append(i)

# 将size_new转换为序列对象,并替换数据集apps内原始字段size的值
apps['size'] = pd.Series(size_new)        

# 查看数据转换后的前10行
apps.head(10)
案例3:词频统计

如下图所示,这是一篇新闻报道,如何基于该报道完成词频统计的操作?由于实际工作中评论数据的分析会涉及到敏感信息,故这里用新闻报道代替,但下文中所介绍的代码核心部分基本类似。:

# 导入第三方模块
import jieba  # 用于中文句子的切词
import collections  # 用于词频的排序

# 读入新闻报道
fn = open('news.txt', encoding='utf-8')
news = fn.readlines()

# 将新闻报道的各段内容拼接为一个整体
news = ''.join(news)
# 删除特殊字符,如“\n”
news = news.replace('\n', '')

# 对新闻内容切词,并保留1个长度以上的词
words = []
for i in jieba.lcut(news):
    # 通过逻辑判断,保留至少包含两个字符的词
    if len(i) > 1:
        words.append(i)

# 词频统计,并将词频结果存储到字典中
wf = {}
for i in set(words):
    wf[i] = words.count(i)

# 对词频结果做排序
collections.Counter(wf).most_common()
结语

OK,今天的内容就分享到这里,如果你有任何问题,欢迎在公众号的留言区域表达你的疑问。同时,也欢迎各位大咖在留言区分享你们自己的策略,我会第一时间将你的留言分享给大家。

【数据链接】

链接

https://pan.baidu.com/s/18Q8WHJW0etG__pxLv_-rng

提取码:zznv

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据分析1480 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • for循环示意图
  • 案例1:多数据文件的合并
  • 案例2:数据单位的统一处理
  • 案例3:词频统计
  • 结语
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档