簡體   English   中英

用於搜索的Pandas列索引?

[英]Pandas column indexing for searching?

在關系數據庫中,我們可以在列上創建索引,以加快查詢和加入這些列。 我想在pandas數據幀上做同樣的事情。 行索引似乎不是關系數據庫提供的。

問題是:pandas中的列是否為默認搜索索引?

如果沒有,是否可以手動索引列以及如何進行索引?

編輯:我已經閱讀過pandas文檔並在各處搜索,但沒有人提到索引和搜索/合並大熊貓的表現。 雖然它在關系數據庫中很重要,但似乎沒有人關心這個問題。 任何人都可以在熊貓上做出關於索引和性能的陳述嗎?

謝謝。

如@pvg所述 - 熊貓模型不是內存關系數據庫的模型。 所以,如果我們嘗試用sql和它的特性來模擬大熊貓,它對我們沒什么幫助。 相反,讓我們從根本上看問題 - 你正在有效地嘗試加速列查找/連接。

通過將要加入的列設置為兩個數據框 (您希望加入的左右數據框)中的索引 ,然后對兩個索引進行排序,可以大大加快連接速度。

這是一個示例,向您展示加入已排序索引時可以獲得的加速類型:

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μs,速度要快得多。

我相信你可以對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]

現在列查找應該更快 - 如果有人可以在具有數千列的數據幀上測試它,那將是很好的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM