gpt4 book ai didi

python - 用于搜索的 Pandas 列索引?

转载 作者:太空狗 更新时间:2023-10-29 21:56:17 24 4
gpt4 key购买 nike

在关系型数据库中,我们可以在列上创建索引,以加快对这些列的查询和连接。我想在 Pandas 数据框上做同样的事情。行索引似乎不是关系数据库提供的。

问题是:默认情况下,pandas 中的列是否已索引以供搜索?

如果不能,是否可以手动索引列以及如何做?

编辑:我已阅读 pandas 文档并到处搜索,但没有人提到 pandas 的索引和搜索/合并性能。似乎没有人关心这个问题,尽管它在关系数据库中很关键。任何人都可以就 Pandas 的索引和性能发表声明吗?

谢谢。

最佳答案

如@pvg 所述 - pandas 模型不是内存关系数据库的模型。所以,如果我们试图用 sql 和它的特性来类比 pandas,那对我们没有多大帮助。相反,让我们从根本上看问题 - 您正在有效地尝试加速列查找/连接。

您可以通过将您希望加入的列设置为两个数据帧(您希望加入的左右数据帧)中的索引来显着加快加入速度,并且然后对两个索引进行排序

这是一个示例,向您展示加入排序索引时可以获得的加速:

import pandas as pd
from numpy.random import randint

# Creating DATAFRAME #1
columns1 = ['column_1', 'column_2']
rows_df_1 = []

# generate 500 rows
# each element is a number between 0 and 100
for i in range(0,500):
row = [randint(0,100) for x in range(0, 2)]
rows_df_1.append(row)

df1 = pd.DataFrame(rows_df_1)
df1.columns = columns1

print(df1.head())

第一个数据框如下所示:

Out[]:    

column_1 column_2
0 83 66
1 91 12
2 49 0
3 26 75
4 84 60

让我们创建第二个数据框:

columns2 = ['column_3', 'column_4']
rows_df_2 = []
# generate 500 rows
# each element is a number between 0 and 100
for i in range(0,500):
row = [randint(0,100) for x in range(0, 2)]
rows_df_2.append(row)

df2 = pd.DataFrame(rows_df_1)
df2.columns = columns2

第二个数据框如下所示:

Out[]:    

column_3 column_4
0 19 26
1 78 44
2 44 43
3 95 47
4 48 59

现在假设您希望在 column_1 == column_3 上加入这两个数据帧

# setting the join columns as indexes for each dataframe
df1 = df1.set_index('column_1')
df2 = df2.set_index('column_3')


# joining
%time
df1.join(df2)

Out[]:
CPU times: user 4 ms, sys: 0 ns, total: 4 ms
Wall time: 46 ms

如您所见,仅将连接列设置为数据帧索引并在之后连接大约需要 46 毫秒。现在,让我们尝试加入*在对索引进行排序之后*

# sorting indexes
df1 = df1.sort_index()
df2 = df2.sort_index()

Out[]:

CPU times: user 0 ns, sys: 0 ns, total: 0 ns
Wall time: 9.78 µs

这大约需要 9.78 微秒,速度要快得多。

我相信您可以将相同的排序技术应用于 pandas 列 - 按字典顺序对列进行排序并修改数据框。我没有测试下面的代码,但像这样的东西应该可以加快列查找速度:

import numpy as np
# Lets assume df is a dataframe with thousands of columns
df = read_csv('csv_file.csv')
columns = np.sort(df.columns)

df = df[columns]

现在列查找应该快得多 - 如果有人可以在具有一千列的数据框中测试这一点,那就太好了

关于python - 用于搜索的 Pandas 列索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42641018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com