Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >连接两个来源的数据的最佳方式是什么?例如通过日期?

连接两个来源的数据的最佳方式是什么?例如通过日期?
EN

Stack Overflow用户
提问于 2016-02-03 11:33:02
回答 1查看 51关注 0票数 0

我正在编写一个scipt (即曾经),其中我正在从excel文件中读取数据。对于这些数据,我创建了一个基于日期和时间的id。我有一个缺失的变量,它包含在一个txt文件中。txt-file还具有创建id的日期和时间。

现在我想基于id链接excel文件和txt文件中的数据。对,不,我正在从txt文件构建两个列表。一个包含id,另一个包含我需要的值。然后,我使用枚举函数从id列表中获取索引,其中id在两个数据集中是相同的。我使用该索引从值列表中获取值。代码看起来像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
datelist = []
valuelist = []
txtfile = open(folder + os.sep + "Textfile.txt", "r")
ILines = txtfile.readlines()
for i,row in enumerate(ILines):
     datelist.append(row.split(",")[1])
     valuelist.append(row.split(",")[2])
rows = myexceldata
for row in rows:
     x = row[id]
     row = row + valuelist[[i for i,e in enumerate(datelist ) if e == x][0]]

然而,这需要很长时间,我想知道是否有更好的方法来做到这一点。

这些文件如下所示:

Excelfile:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Date          Time          Var1          Var2
03.02.2016    12:53:24      10            27
03.02.2016    12:53:25      10            27
03.02.2016    12:53:26      10            27

文本文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Date          Time          Var3
03.02.2016    12:53:24      16
03.02.2016    12:53:25      20

结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Date          Time          Var1          Var2          Var3
03.02.2016    12:53:24      10            27            16
03.02.2016    12:53:25      10            27            20
03.02.2016    12:53:26      10            27            *)

*)它将是完美的,如果这里的值与上面的值相同,但也可以为空

好吧,我忘了一件重要的事。很抱歉:并不是所有的excelfile文件都在文本文件中。最好的选择是在excelfile文件的时间之前从文本文件的前一时间获取var3。但也可以选择将其保留为空。

EN

回答 1

Stack Overflow用户

发布于 2016-02-03 12:35:54

如果你的两个文件都是按时间顺序排序的,那么下面这种方法会更快:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from heapq import merge
from itertools import groupby, chain
import csv

with open('excel.txt', 'rb') as f_excel, open('textfile.txt', 'rb') as f_text, open('output.txt', 'wb') as f_output:
    csv_excel = csv.reader(f_excel)
    csv_text = csv.reader(f_text)
    csv_output = csv.writer(f_output)

    header_excel = next(csv_excel)
    header_text = next(csv_text)
    csv_output.writerow(header_excel + [header_text[-1]])

    for k, g in groupby(merge(csv_text, csv_excel), key=lambda x: x[0:2]):
        csv_output.writerow(k + list(chain.from_iterable(cols[2:] for cols in g)))

这假设您的两个输入文件都是csv格式,并按如下方式工作:

  1. 为所有文件创建csv读取器/写入器。这允许文件以列列表的形式自动读入,而无需拆分每行。
  2. 从这两个文件中提取标题并将组合形式写入输出。
  3. 获取两个输入文件并将它们传递给merge。这将按顺序从任一输入文件中一次返回一行。
  4. 将其传递给groupby,以便将具有相同日期和时间的行组合在一起。这将返回一个键和一个组,其中键是匹配的日期和时间,组是匹配行的可迭代。
  5. 对于每个分组的条目,将键和列2从每一行开始写入输出文件。chain用于生成平面列表。

这将为您提供如下所示的输出文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Date,Time,Var1,Var2,Var3
03.02.2016,12:53:24,10,27,16
03.02.2016,12:53:25,10,27,20

由于您已经有了excel数据,因此需要将其作为行/列的列表传递给merge,而不是csv_excel

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35175887

复制
相关文章
新手学习编程的最佳方式是什么?
回答这个问题是我最近两年来唯一的关注点。我觉得此处提及的许多资源尽管都很不错,然而我却注意到,成功的学生,无论使用哪种资源,往往都会在以下三个方面,比其他人有着更好的表现。 聚焦习惯而不是目标 独自学
Crossin先生
2018/04/16
1.1K0
新手学习编程的最佳方式是什么?
新手学习编程的最佳方式是什么
回答这个问题是我最近两年来唯一的关注点。我觉得此处提及的许多资源尽管都很不错,然而我却注意到,成功的学生,无论使用哪种资源,往往都会在以下三个方面,比其他人有着更好的表现。 聚焦习惯而不是目标 独自学
程序员互动联盟
2018/03/13
1.2K0
新手学习编程的最佳方式是什么
nodejs 下运行 typescript的最佳方式是什么?
在 Node.js 中运行 TypeScript 的最佳方式是使用 TypeScript 编译器(tsc)将 TypeScript 代码编译为 JavaScript,然后在 Node.js 环境中运行生成的 JavaScript 代码。以下是一种常见的做法:
王小婷
2023/09/14
1.6K0
离线存储加密货币的最佳方式是什么?
我们最好将它们存储在冷藏库或离线钱包中,因为在这些类型的钱包中,您可以控制私钥 目前市场上有数百种加密货币。虽然他们中的一些人拥有多个离线钱包选项,但其中一些根本没有。 我将用最新的选项更新此冷库或离线钱包列表,因此请继续检查这里是否有更新。 Bitcoin-Ledger Nano S, Trezor & KeepKey,Bitaddress,Electrum, Armory Ethereum-Ledger Nano S, Trezor & KeepKey,MyEtherWallet Ripple-Ledg
架构师研究会
2018/04/09
2.1K0
通过USB连接方式共享安卓的网络连接
现代的手机都支持Wi-Fi tethering,也就是通过Wi-Fi让手机的数据网络连接共享给电脑使用,也称为”无线热点”(HotSpot)。此外,你在使用iPhone的时候,会发现一个非常有用的功能,就是通过USB连线来共享数据网络的Internet连接,而且对于苹果手机和苹果电脑是即插即用的。
云深无际
2020/08/12
7.7K0
通过USB连接方式共享安卓的网络连接
Java获取两个日期之间的日期
/** * 获取两个日期之间的日期 * @param start 开始日期 * @param end 结束日期 * @return 日期集合 */ private List<Date> getBetweenDates(Date start, Date end) { List<Date> result = new ArrayList<Date>(); Calendar tempStart = Calendar.g
水煮麥楽雞
2022/11/20
6.1K0
创建新一代数据中心的最佳方式是什么?
编者按:围绕“创建新一代数据中心的最佳方式是什么? ”VMware和Cisco展开辩论,所谓“王婆卖瓜自卖自夸”,一个力推自己子公司产品中的网络虚拟化技术,另一个狂吹自己的ACI,针尖对麦芒且看两大巨
SDNLAB
2018/04/04
1.1K0
创建新一代数据中心的最佳方式是什么?
推理与统计:推理的来源是什么?
最近chatGPT大火,自己也刷了不少相关的文章,自己一知半解,网上大都也是蹭热点的小作文。
明月AI
2023/08/26
1610
推理与统计:推理的来源是什么?
golang如何计算两个日期之间的日期差?
golang如何计算两个日期之间的日期差? 日期格式:“2017-09-01” ,“2018-03-11”
双面人
2022/09/28
7.4K0
如何用Python获取两个日期之间的日期?
问:如何用Python获取两个日期之间的日期? def date_range(start, end): delta = end - start # as timedelta days = [start + timedelta(days=i) for i in range(delta.days + 1)] return days start_date = datetime(2020, 12, 1) end_date = datetime(2020, 12, 5) print(d
TalkPython
2020/12/11
5.7K0
检测数据库连接泄漏的最佳方法
数据库连接不是免费的,这就是首先使用连接池解决方案的原因。但是,单独的连接池并不能解决与管理数据库连接相关的所有问题。应用程序开发人员必须确保Connection在不再需要时关闭每一个。在幕后,连接池提供了一个逻辑事务,当它被关闭时,它会返回到池中,以便其他并发事务可以进一步重用它。
全栈程序员站长
2022/11/04
1.5K0
大数据和物联网的连接方式
How-big-data-and-the-internet-of-things-are-connected-1068x656-1.jpg
用户4122690
2020/06/06
8930
大数据和物联网的连接方式
计算两个日期中间的天数_excel两个日期相减计算天数
内存限制: 65536kB 描述
全栈程序员站长
2022/09/20
2.7K0
「R」连接两个数据集的各种 join
本文来自 stack overflow 上的一个帖子 base与data.table适用 SQL版 流行的dplyr 最后看看各种操作的性能吧 data.table 就是牛批!(可惜没有tidyverse易用) 测试代码: library(microbenchmark) library(sqldf) library(dplyr) library(data.table) sapply(c("sqldf","dplyr","data.table"), packageVersion, simpli
王诗翔呀
2022/01/21
1K0
「R」连接两个数据集的各种 join
通过UDP的组播方式收发数据
客户端代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Text; na
liulun
2022/05/09
1.2K0
在Python中操纵json数据的最佳方式
在日常使用Python的过程中,我们经常会与json格式的数据打交道,尤其是那种嵌套结构复杂的json数据,从中抽取复杂结构下键值对数据的过程枯燥且费事。
朱卫军 AI Python
2022/04/03
4K0
在Python中操纵json数据的最佳方式
Carbon 计算两个日期相差天数,php Carbon 计算两个日期相差天数,php计算两个日期相差天数的方法
高久峰
2023/06/03
1.7K0
php计算两个日期之间的间隔,避免导出大量数据
在做系统业务功能的时候,有的时候业务人员会进行超大范围地导出excel表格,导致内存、CPU占用飙升。
宣言言言
2019/12/17
2.4K0
Calendar:计算两个日期相差的天数
/** * 计算两个日期的相隔天数 * @author shijing * 2015年9月6日下午5:14:54 * @param date1 * @param date2 * @return */ public static int daysBetween(Date date1,Date date2){ Calendar cal = Calendar.getInstance();
执笔记忆的空白
2020/12/25
4.9K0
Java 获取两个日期相差的月数
/** * 获取两个日期相差的月数 */ public static int getMonthDiff(Date d1, Date d2) { Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(d1); c2.setTime(d2); int year1 = c1.get
一个会写诗的程序员
2020/02/13
4.8K0

相似问题

通过多列模糊连接(多个)数据帧的最佳方式是什么?

110

数据库连接的最佳方式是什么?

13

通过C/C++连接Facebook的最佳方式是什么?

10

通过C#连接到离线数据库的最佳方式是什么

30

Ruby on Rails:比较两个日期的最佳方式是什么?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文