使用Pandas和NumPy实现数据获取

news/2024/11/14 13:00:42/文章来源:https://www.cnblogs.com/kohler21/p/18353866

公众号本文地址:https://mp.weixin.qq.com/s/Uc4sUwhjLTpOo85ubj0-QA

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

数据:http://u6v.cn/5W2i8H

http://u6v.cn/6hUVjk

image

初步发现数据有三个特点::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)

image

接下来定义两个函数,我们希望把所有的数据都写入两个文件夹,一个是”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均为车站的indexin_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均为车站的indexin_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_filedf_in = pd.DataFrame(in_arr)df_in.to_csv("./data/in_test.csv",mode = 'r+', header = True, index = None)# out_filedf_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/" + nametarget_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)#breakelse:print("not exist")process_not_exists(f)print("done")

公众号本文地址:https://mp.weixin.qq.com/s/Uc4sUwhjLTpOo85ubj0-QA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/781699.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Datawhale X 魔搭 AI夏令营(二)

一.AI生图的伦理与道德 1.虽然AI生图的能力强大,但是极易被使用在不正当的场景,未来的挑战不仅仅是技术的突破,更有攻防技术的跟进。 二.使用通义千问工具对内核代码进行解析,更快速的搭建代码 1.通义千问是具有信息查询、语言理解、文本创作等多能力的AI助手 2.使用方法三…

docker 详细教程(通俗易懂,带有应用示例)

1、Docker 基本概念 什么是 Docker? Docker 是一个开源的容器化平台,允许开发者封装他们的应用程序及其所有依赖项到一个标准化的单元中,这个单元被称为“容器”。容器可以在任何支持 Docker 的环境中运行,从而确保应用程序的可移植性和一致性。 Docker 的优势一致性和可移…

for循环练习

static void Main(string[] arg){int intSum = 0;for (int i = 0; i <= 100; i++){intSum += i;}Console.WriteLine(intSum);Console.ReadKey();}static void Main(string[] arg){for (int i = 0; i < 100; i++){Console.WriteLine("我下次一定小心!");//打印&…

Pandas从入门到放弃

公众号本文地址:https://mp.weixin.qq.com/s/mSkA5KvL1390Js8_1ZBiywPandas简介 Pandas是Panel data(面板数据)和Data analysis(数据分析)的缩写,是基于NumPy的一种工具,故性能更加强劲。Pandas在管理结构数据方面非常方便,其基本功能可以大致概括为一下5类:数据 / 文…

代码随想录day27 || 455 分饼干,376 摆动序列,53 最大子序列和

分饼干 func findContentChildren(g []int, s []int) int {// 第一思路,双指针暴力解法var count intvar used2 = make([]bool, len(s))g = quicksort(g)s = quicksort(s)for _, child := range g {for idx, cookie := range s {if !used2[idx] && cookie >= child…

如何创建良好的数据模型?

本文将带你深入了解如何创建一个高效的数据模型,并以 NocoBase 为例,展示如何快速建立适合业务需求的数据结构。数据模型是构建高效和稳定系统的基础。它不仅决定了如何存储和管理数据,还直接影响系统的性能和可扩展性。 本文将带你深入了解如何创建一个高效的数据模型,并以…

使用nvm管理多个版本的nodejs

项目依赖某个版本的nodejs,而我本地需要用最新版,那么就存在多个版本nodejs要使用了,如何方便的进行管理呢?背景:项目依赖某个版本的nodejs,而我本地需要用最新版,那么就存在多个版本nodejs要使用了,如何方便的进行管理呢?使用nvm!下载地址:https://github.com/core…

T1破大防

咱就是说你直接写 \(1-n\) 的排列不好吗。。。 真破大防了,一开始对了然后造了一组无解数据 1,1,3,5 我甚至还在找题目有没有写保证有解或无解输出-1之类的。。然后越改越假 以后建议多看看题目

使用BatchNorm替代LayerNorm可以减少Vision Transformer训练时间和推理时间

以Vision Transformer (ViT)的发现为先导的基于transformer的架构在计算机视觉领域引发了一场革命。对于广泛的应用,ViT及其各种变体已经有效地挑战了卷积神经网络(CNN)作为最先进架构的地位。尽管取得了一些成功,但是ViT需要更长的训练时间,并且对于小型到中型输入数据大小,推…

打造垂直领域内容的问答机器人

简介 在大模型问世之后,其中一个最核心的功能就是问答机器人。但是若直接将问题抛给 ChatGPT,仍然解决不了以下限制:相关的关联数据需要联网。 相关的关联数据是 GPT 也不知道的私密数据。而在前面介绍RAG 检索增强生成的时候也同样提到了这一点。 应用场景 垂直领域内容的问…

恒磁场 知识梳理

新概念物理:电磁学第二章梳理安培定律 \[\def\ooint{{\bigcirc}\kern-11.5pt{\int}\kern-6.5pt{\int}} \def\oooint{{\bigcirc}\kern-12.3pt{\int}\kern-7pt{\int}\kern-7pt{\int}} \]  恒定电流只能存在于闭合回路中,但是闭合回路的形状是千变万化的,直接研究整个闭合回路…

第九期 写一个自己的AutoGpt

一:先了解AutoGpt https://zhuanlan.zhihu.com/p/629909493?utm_id=0 二:实现自己的AutoGpt之一:prmpt模板处理思路prompt与代码分离编写reason(理由) & Act (行为)的prompt模板基于langchain编写AutoGpt框架设计长时和短时Memory封装自己的tools运行AutoGpt(一)…