Gibt es einen schnellen Weg, um eine Stringsspalte mit jedem Substring in einer Liste anzupassen?Python

Python-Programme
Anonymous
 Gibt es einen schnellen Weg, um eine Stringsspalte mit jedem Substring in einer Liste anzupassen?

Post by Anonymous »

Ich habe eine Datenfrequenzspalte, die aus Strings besteht. Ich habe auch eine Liste von Substrings. Für jedes Substring möchte ich es gegen jede Zeichenfolge in der Spalte DataFrame testen und true zurückgeben, wenn sich das Substring in der Zeichenfolge befindet. Die folgenden Funktionen sind aber sehr langsam. < /P>

Code: Select all

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)
Um einen schnelleren Ansatz zu finden, habe ich ISIn versucht. Br />

Code: Select all

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)
Ich habe auch Filter ausprobiert, aber es scheint, dass es jeweils nur eine Substring -Eingabe einnehmen kann.

Code: Select all

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)
Kennt jemand einen schnellen Weg, um eine Liste von Substrings an Zeichenfolgen anzupassen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post