使用Pandas和NumPy实现数据获取
以某城市地铁数据为例,通过提取每个站三个月15分钟粒度的上下客量数据,展示Pandas和Numpy的案例应用。

初步发现数据有三个特点::1、地铁数据的前五行是无效的,第七行给出了每个站点的名字;2、每个车站是按照15分钟粒度统计客流,给出了进站、出战、进出站客流;3、运营时间是从2:00-23:59,与地铁实际运营时间5:30-23:00不同,需要调整。
# 导入模块
import os
from pathlib import Path
import pandas as pd
import numpy as np
导入成功后,先获取目标文件夹下(data)的文件名,存入filenames变量中。
# 获取文件名
path = "./data"
filenames = os.listdir(path)
filenames

获取每个车站所对应的列号,确定pdd.read_excel(usecols)中usecols的参数
# 筛选掉 “合计”无用项,并设置target_col存储目标项
name = filenames[0]
f = "./data/" + name
# 前五行是无用数据
file = pd.read_excel(f, skiprows = 5, skipfooter = 3)
tarr = file.values
print(tarr[3])
test = tarr[0]
target_col = []
for i in range(len(test)):
tmp = test[i]
if tmp != '合计':
target_col.append(i)
print(target_col)

获取车站名和车站编号:
# 获取车站名和车站编号
nfile = pd.read_excel(f, skiprows = 5, skipfooter = 3, usecols = target_col)
arrt = nfile.values
stations_name = []
stations_index = []
for i in range(2,len(arrt[0])):
stations_index.append(i)
stations_name.append(arrt[0][i])
print(stations_name)
print(stations_index)

接下来定义两个函数,我们希望把所有的数据都写入两个文件夹,一个是”in.csv”存储每个站的进站数据,一个是”out.csv”存储每个站的出站数据。如果目标文件不存在,代码如下:
def process_not_exists(f):
# 前五行是无用数据
file = pd.read_excel(f, skiprows = 5, skipfooter = 3, usecols = target_col)
arr = file.values
# 构造一个字典先存储数据
d_in = {}
d_out = {}
for i in stations_index:
# 存储第i个车站的上下客流数据
d_in[i] = []
d_out[i] = []
# 5:30 之后的数据是从excel的50行开始,处理后的数据应从43行开始
for i in range(43,len(arr)):
l = arr[i] # 获取第i行的数据
# 通过条件直接筛选掉“进出站”
if l[1] == '进站':
# 进站处理
for j in range(2,len(l)):
d_in[j].append(l[j])
if l[1] == '出站':
# 出站处理
for j in range(2,len(l)):
d_out[j].append(l[j])
in_list = [] # 存储进站数据
out_list = [] # 存储出站数据
for key in d_in:
# d_in 与 d_out 的key均为车站的index
in_list.append(d_in[key])
out_list.append(d_out[key])
df_in = pd.DataFrame(in_list)
df_in.to_csv("./data/in.csv", header = True, index = None)
df_out = pd.DataFrame(out_list)
df_out.to_csv("./data/out.csv", header = True, index = None)
如果目标文件存在,读取部分与目标文件不存在时相同,在处理输出时要进行修改,代码如下:
# 目标文件存在时
def process_exists(f,target_file_in,target_file_out):
infile = pd.read_csv(target_file_in)
outfile = pd.read_csv(target_file_out)
in_arr = infile.values.tolist()
out_arr = outfile.values.tolist()
# 前五行是无用数据
file = pd.read_excel(f, skiprows = 5, skipfooter = 3, usecols = target_col)
arr = file.values
# 构造一个字典先存储数据
d_in = {}
d_out = {}
for i in stations_index:
# 存储第i个车站的上下客流数据
d_in[i] = []
d_out[i] = []
# 5:30 之后的数据是从excel的50行开始,处理后的数据应从43行开始
for i in range(43,len(arr)):
l = arr[i] # 获取第i行的数据
# 通过条件直接筛选掉“进出站”
if l[1] == '进站':
# 进站处理
for j in range(2,len(l)):
d_in[j].append(l[j])
if l[1] == '出站':
# 出站处理
for j in range(2,len(l)):
d_out[j].append(l[j])
in_list = [] # 存储进站数据
out_list = [] # 存储出站数据
for key in d_in:
# d_in 与 d_out 的key均为车站的index
in_list.append(d_in[key])
out_list.append(d_out[key])
#合并原有数据
for i in range(len(in_arr)):
in_arr[i] += in_list[i]
out_arr[i] += out_list[i]
# in_file
df_in = pd.DataFrame(in_arr)
df_in.to_csv("./data/in_test.csv",mode = 'r+', header = True, index = None)
# out_file
df_out = pd.DataFrame(out_arr)
df_out.to_csv("./data/out_test.csv",mode = 'r+', header = True, index = None)
对于DataFrame中的数据获取方法有两种:第一种为通过file.iloc[i,j]的方式定位第i行第j列的数据;第二种为通过file.values将file转换为ndarray的数据格式,由于可以事先知道数据每一列的具体含义,直接通过整数下标的方式访问数据。
代码中使用的是第二种方式,这是由于DataFrame的iloc[]函数访问效率低,当数据体量很大时,遍历整个表格的速度会非常慢,而将DataFrame转换为ndarray后,遍历整个表格的数据效率会有显著提升。
下面是主函数,即可完成所有数据的提取。
for name in filenames:
f = "./data/" + name
target_file_in = "./data/in_test.csv"
target_file_out = "./data/out_test.csv"
# 若文件已存在
if Path(target_file_in).exists() and Path(target_file_out).exists():
print("exist")
process_exists(f,target_file_in,target_file_out)
#break
else:
print("not exist")
process_not_exists(f)
print("done")
使用Pandas和NumPy实现数据获取的更多相关文章
- 数据分析之Pandas和Numpy学习笔记(持续更新)<1>
pandas and numpy notebook 最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...
- Python Pandas与Numpy中axis参数的二义性
Stackoverflow.com是程序员的好去处,本公众号将以pandas为主题,开始一个系列,争取做到每周一篇,翻译并帮助pandas学习者一起理解一些有代表性的案例.今天的主题就是Pandas与 ...
- 用豆瓣加速安装pandas、numpy、matplotlib(画图)
安装pandas.numpy会同时被安装 #pthony2.x,用豆瓣加速安装pandas pip install -i https://pypi.doubanio.com/simple/ panda ...
- Pandas和Numpy的一些金融相关的操作(一)
Pandas和Numpy的一些金融相关的操作 给定一个净值序列,求出最大回撤 # arr是一个净值的np.ndarray i = np.argmax( (np.maximum.acumulate(ar ...
- 【强化学习】用pandas 与 numpy 分别实现 q-learning, saras, saras(lambda)算法
本文作者:hhh5460 本文地址:https://www.cnblogs.com/hhh5460/p/10159331.html 特别感谢:本文的三幅图皆来自莫凡的教程 https://morvan ...
- 利用pandas对numpy数组进行简单的科学计算
二维数组转换为DataFrame pandas可直接进行科学计算形式: import numpy as np import pandas as pd a = [1,2,3] b = [4,5,6] # ...
- 利用pandas将numpy数组导出生成excel
代码 # -*- coding: utf- -*- """ Created on Sun Jun :: @author: Bruce Lau ""&q ...
- ubuntu下python安装pandas和numpy等依赖库版本不兼容的问题RuntimeWarning: numpy.dtype size changed
习惯了linux下用pip install numpy及pip install pandas命令了.折腾了好久了. 上来先在python3中pip3 install numpy装了numpy,然后再p ...
- 利用pandas和numpy计算表中每一列的均值
import numpy as np import pandas as pd df = pd.DataFrame({'var1':np.random.rand(100), #生成100个0到1之间的随 ...
- Pandas 与 Numpy 常用方法总结
Lambda 函数实现 简单的说,lambda 就是一个函数,但是这个函数没有名字,所以我们介绍一下这个函数的调用形式,参数与返回值的实现. lambda 的格式如下: lambda [arg1 [, ...
随机推荐
- FreeRDP使用,快速找出账户密码不正确的服务器地址
最近有个需求,需要找出服务器未统一设置账户密码的服务器,进行统一设置,一共有一百多台服务器,一个个远程登录看,那得都费劲啊,这时候就可以用到FreeRDP这个远程桌面协议工具,FreeRDP下载,根据 ...
- 张高兴的 MicroPython 入门指南:(二)GPIO 的使用
目录 什么是 GPIO 使用方法 使用微动开关点亮板载 LED 硬件需求 电路 代码 参考 什么是 GPIO GPIO 是 General Purpose Input Output 的缩写,即&quo ...
- LitCTF 2023 部分wp
LitCTF 2023 PWN 只需要nc一下~ 根目录下的是假flag,真的在环境变量里 口算题卡 简单的计算题 import pwn io = pwn.remote("node5.ann ...
- Solo 开发者周刊 (第7期):Sora出世,或许又一行业将会消失?
这里会整合 Solo 社区每周推广内容.产品模块或活动投稿,每周五发布.在这期周刊中,我们将深入探讨开源软件产品的开发旅程,分享来自一线独立开发者的经验和见解.本杂志开源,欢迎投稿. 好文推荐 sor ...
- xampp+vscode 安装PHP断点调试xdebug
官网下载地址:https://xdebug.org/download.php 这里需要特别注意,有TS(thread safe)和NTS 区别,我建议不要下载最新的,我一开始使用最新的发现插件没有匹配 ...
- 史上最详细的Composer安装tp5教程
Composer安装tp5教程1.下载composer先介绍几个网站Composer官网https://getcomposer.org/ Composer中文网http://www.phpcompos ...
- 【REGX】正则表达式 选中空白行
参考地址: https://www.cnblogs.com/peijyStudy/p/13201576.html VScode并列替换不够智能,我需要等行粘贴,结果SHIFT+ALT复制内容粘贴上去就 ...
- 【Dos-BatchPrograming】03
--1.AT 计划任务 Microsoft Windows [版本 10.0.19041.746] (c) 2020 Microsoft Corporation. 保留所有权利. C:\Users\A ...
- 如何使用H100打游戏——这是史上最快GPU!我们测了四张H100!价值120万元!
资料: 这是史上最快GPU!我们测了四张H100!价值120万元! 对显卡H100的测评视频.
- 使用ChatGPT时的信息安全问题
ChatGPT由于其在对话方面的AI性能的卓越表现已经远远超越了同类的产品,因此赢得了国际科研领域的极大重视,并且也得到了广大用户的支持,但是在人们尽情使用的时候往往忘记了关于ChatGPT的信息安全 ...