Есть ли быстрый способ соответствовать столбцу строк с каждой подстрокой в ​​списке?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли быстрый способ соответствовать столбцу строк с каждой подстрокой в ​​списке?

Сообщение Anonymous »

У меня есть столбец DataFrame, который состоит из строк. У меня также есть список подстроков. Для каждой подстроки я хочу проверить ее по каждой строке в столбце DataFrame, возвращая true , если подстроение находится в строке. Следующее работает, но очень медленно. < /P>

Код: Выделить всё

import pandas as pd
import time

t0 = time.time()

df = pd.DataFrame({
'FullName': ['C:/historical Dog analysis/Digger.doc', 'C:/historical Dog analysis/Roscoe.doc', 'C:/2024/Budgie requests/pipsqueak.csv', 'C:/text4.doc', 'C:/text5.doc'],
})

new_columns = {"_Outreach/Website design": (df['FullName'].str.contains("/historical Dog analysis/|"\
"/Budgie requests/|"\
"Dog analysis/best practices",case=False))
}

new_df = pd.DataFrame(new_columns)

df = pd.concat([df, new_df], axis=1).reindex(df.index)

t1 = time.time()
print(t1-t0)
print(df)
, пытаясь найти более быстрый подход, я попробовал ISIN. Но он, кажется, работает только при сопоставлении строки с строкой, а не строки для подстроения. < Br />

Код: Выделить всё

t0 = time.time()

df = pd.DataFrame({
'FullName': ['C:/historical Dog analysis/Digger.doc', 'C:/historical Dog analysis/Roscoe.doc', 'C:/2024/Budgie requests/pipsqueak.csv', 'C:/text4.doc', 'C:/text5.doc'],
})

#works, but not useful because requires full string match
new_columns = df["FullName"].isin(["C:/historical Dog analysis/Digger.doc","C:/2024/Budgie requests/pipsqueak.csv"])
#doesn't work (Returns a list of FALSE in next column)
# new_columns = df["FullName"].isin([".*/historical Dog analysis/.*"])

new_df = pd.DataFrame(new_columns)

df = pd.concat([df, new_df], axis=1).reindex(df.index)
t1 = time.time()
print(t1-t0)
print(df)
Я также пробовал фильтр , но кажется, что он может занимать только один ввод подстроения за раз.

Код: Выделить всё

col_one_list = df['FullName'].tolist()
#doesn't work:TypeError: 'in ' requires string as left operand, not list
# b = ["/historical Dog analysis/","/Budgie requests/"]
#doesn't work: TypeError: unsupported operand type(s) for |: 'str' and 'str'
# b = ("/historical Dog analysis/"|"/Budgie requests/")
#works, but can only search one substring at a time
b = "/historical Dog analysis/"
new_columns = list(filter(lambda x: b in x, col_one_list))
print(new_columns)

new_df = pd.DataFrame(new_columns)

df = pd.concat([df, new_df], axis=1).reindex(df.index)
t1 = time.time()
print(t1-t0)
print(df)
Кто -нибудь знает быстрый способ сопоставить список подстроков с строками?

Подробнее здесь: https://stackoverflow.com/questions/794 ... -in-a-list
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»