慢循环python在python的另一个数据帧中搜索数据

2024-05-15 12:30:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据框:一个是我所有的数据(称为“数据”),另一个是每个观测开始和结束的不同测站的纬度和经度(称为“信息”),我试图得到一个数据框,在这个数据框中,我将在每个观测站的旁边显示纬度和经度,我的python代码:

for i in range(0,15557580):
    for j in range(0,542):
         if data.year[i] == '2018' and data.station[i]==info.station[j]:
             data.latitude[i] = info.latitude[j]
             data.longitude[i] = info.longitude[j]
             break

但既然我有大约1500万个观察,做这个需要很多时间,有没有更快的方法呢?你知道吗

非常感谢(我还是个新手)

编辑:

我的文件信息是这样的(大约500个观察,每个站一个)

enter image description here

我的文件数据是这样的(这里没有显示其他变量)(大约1500万次观察,每次旅行一次)

enter image description here

我希望得到的是,当站数匹配时,得到的数据会是这样的:

enter image description here


Tags: 文件数据代码ininfo信息fordata
2条回答

当任何人开始处理大型数据集时,这是一个非常反复出现的重要问题。大数据本身就是一个完整的主题,这里简单介绍一下主要概念。你知道吗

<强>1。准备数据集

在大数据中,80%到90%的时间用于收集、过滤和准备数据集。创建数据子集,使其为进一步处理而优化。你知道吗

<强>2。优化脚本

短代码并不总是意味着性能方面的优化代码。在您的情况下,如果不知道您的数据集,很难说您应该如何处理它,您将不得不自己找出如何避免尽可能多的计算,同时获得完全相同的结果。尽量避免任何不必要的计算。你知道吗

如果合适,您还可以考虑将工作拆分为多个线程。你知道吗

一般来说,您不应该使用for循环和break循环。当你不知道要经过多少个循环时,你应该总是使用whiledo...while循环。你知道吗

3岁。考虑使用分布式存储和计算

这是一个主题本身太大了,无法在这里全部解释。你知道吗

以序列化的方式存储、访问和处理数据对于少量数据来说速度更快,但对于大型数据集来说非常不合适。相反,我们使用分布式存储和计算框架。你知道吗

它的目的是并行地做每件事。它依赖于一个名为MapReduce的概念。你知道吗

第一个分布式数据存储框架是Hadoop(例如Hadoop分布式文件系统HDFS)。此框架有其优点和缺点,具体取决于您的应用程序。你知道吗

在任何情况下,如果您愿意使用此框架,那么您可能更适合不直接在HDFS上使用MR,而是在HDFS上使用更高级别的框架,最好是在内存中,例如SparkApache Ignite。另外,根据您的需要,尝试查看框架,例如HivePigSqoop。你知道吗

同样,这个主题是一个完全不同的世界,但可能非常适合你的情况。请随意记录所有这些概念和框架,如果需要,请在评论中留下您的问题。你知道吗

这是一个解决方案。还可以使用pandas.mergedata添加2个新列并执行等效映射。你知道吗

# create series mappings from info
s_lat = info.set_index('station')['latitude']
s_lon = info.set_index('station')['latitude']

# calculate Boolean mask on year
mask = data['year'] == '2018'

# apply mappings, if no map found use fillna to retrieve original data
data.loc[mask, 'latitude'] = data.loc[mask, 'station'].map(s_lat)\
                                 .fillna(data.loc[mask, 'latitude'])

data.loc[mask, 'longitude'] = data.loc[mask, 'station'].map(s_lon)\
                                  .fillna(data.loc[mask, 'longitude'])

相关问题 更多 >