相关疑难解决方法(0)

如何测试一个字符串是否包含列表中的一个子字符串?

是否有任何功能相当于df.isin()df[col].str.contains()?的组合?

例如,假设我有这个系列 s = pd.Series(['cat','hat','dog','fog','pet']),并且我想找到s包含任何内容的所有地方['og', 'at'],我想要获得除了宠物之外的一切.

我有一个解决方案,但它相当不优雅:

searchfor = ['og', 'at']
found = [s.str.contains(x) for x in searchfor]
result = pd.DataFrame[found]
result.any()
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

python string match dataframe pandas

90
推荐指数
3
解决办法
8万
查看次数

在pandas中使用带有数据帧的str.contains()

我想知道是否有更有效的方法在Pandas中使用str.contains()函数,一次搜索两个部分字符串.我想在数据框中搜索包含"nt"或"nv"的数据的给定列.现在,我的代码看起来像这样:

    df[df['Behavior'].str.contains("nt", na=False)]
    df[df['Behavior'].str.contains("nv", na=False)]
Run Code Online (Sandbox Code Playgroud)

然后我将一个结果追加到另一个.我想做的是使用一行代码来搜索包含"nt"或"nv"或"nf"的任何数据.我已经玩了一些我认为应该工作的方法,包括在术语之间插入管道,但所有这些都会导致错误.我已经检查了文档,但我不认为这是一个选项.我得到这样的错误:

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-113-1d11e906812c> in <module>()
    3 
    4 
    ----> 5 soctol = f_recs[f_recs['Behavior'].str.contains("nt"|"nv", na=False)]
    6 soctol

    TypeError: unsupported operand type(s) for |: 'str' and 'str'
Run Code Online (Sandbox Code Playgroud)

有没有快速的方法来做到这一点?感谢您的帮助,我是初学者,但我喜欢数据争夺的熊猫.

python string performance dataframe pandas

27
推荐指数
1
解决办法
6万
查看次数

何时使用Rabin-Karp或KMP算法?

我使用以下字母表生成了一个字符串. {A,C,G,T}.我的字符串包含超过10000个字符.我正在搜索以下模式.

  • ATGGA
  • TGGAC
  • CCGT

我已经要求使用具有O(m+n)运行时间的字符串匹配算法.

m = pattern length
n = text length
Run Code Online (Sandbox Code Playgroud)

两者KMP and Rabin-Karp algorithms都有这个运行时间.在这种情况下,最合适的算法(Rabin-Carp和KMP之间)是什么?

string algorithm matching knuth-morris-pratt rabin-karp

21
推荐指数
1
解决办法
9713
查看次数

正则表达式替换需要花费数百万个文档的时间,如何使其更快?

我有这样的文件:

documents = [
    "I work on c programing.",
    "I work on c coding.",
]
Run Code Online (Sandbox Code Playgroud)

我有同义词文件,如:

synonyms = {
    "c programing": "c programing",
    "c coding": "c programing"
}
Run Code Online (Sandbox Code Playgroud)

我想替换我编写此代码的所有同义词:

# added code to pre-compile all regex to save compilation time. credits alec_djinn

compiled_dict = {}
for value in synonyms:
    compiled_dict[value] = re.compile(r'\b' + re.escape(value) + r'\b')

for doc in documents:
    document = doc
    for value in compiled_dict:
        lowercase = compiled_dict[value]
        document = lowercase.sub(synonyms[value], document)
    print(document)
Run Code Online (Sandbox Code Playgroud)

输出:

I work on c …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing cpython word2vec

9
推荐指数
1
解决办法
2604
查看次数

检查熊猫数据框中是否有多个子字符串

我有一个 Pandas 数据框,我想检查某个列的子字符串。目前我有 30 行这样的代码:

df['NAME'].str.upper().str.contains('LIMITED')) |
(df['NAME'].str.upper().str.contains('INC')) |
(df['NAME'].str.upper().str.contains('CORP')) 
Run Code Online (Sandbox Code Playgroud)

它们都与一个or条件相关联,如果其中任何一个为真,则名称是公司的名称而不是个人的名称。

但对我来说,这似乎不是很优雅。有没有办法检查熊猫字符串列中的“此列中的字符串是否包含以下列表中的任何子字符串” ['LIMITED', 'INC', 'CORP']

我找到了 pandas.DataFrame.isin 函数,但这仅适用于整个字符串,不适用于我的子字符串。

python select substring pandas

9
推荐指数
1
解决办法
7208
查看次数

在大型数据集的pandas数据框中搜索和替换

我有一个大小为100万的数据集并输入数据框.

Id      description
 1      bc single phase acr
 2      conditioning accum
 3      dsply value ac
和字典大小2927,如下所示:

Key     Value
accum   accumulator
bb      baseboard
dsply   display

执行以下代码以使用其值替换dataframe中找到的字典键

dataset=dataset.replace(dict, regex=True)
Run Code Online (Sandbox Code Playgroud)

但它会耗费更多的时间来实现,即2000.0数据集的104.07914903743769秒,并且需要8GB RAM,我需要为数百万的数据集应用此代码.所以有人能告诉我如何减少执行时间吗?还有其他方法可以完成任务吗?

python regex pandas

6
推荐指数
1
解决办法
626
查看次数

将通配符应用于 Pandas isin 过滤器

总菜鸟在这里,对不起初学者的问题。我一直在 Pandas 中绞尽脑汁,试图过滤 Dataframe 中的一个系列,以定位包含字符串列表中的一个的行。

import pandas as pd
streets = ['CONGRESS', 'GUADALUPE', 'BEN WHITE', 'LAMAR', 'MANCHACA', 'BURNET', 'ANDERSON', 'BRAKER' ]
# the actual list of street names is much longer than this

strs = pd.read_csv('short_term_rental_locations.csv')

# the following returns no values, or all 'False' values to be more accurate
strs[strs['PROP_ADDRESS'].isin(streets)]

# but if I use .contains, i can find rows that contain part of the 
# street names, but .contains has a limit of six positional arguments.
strs[strs['PROP_ADDRESS'].str.contains('CONGRESS')]
Run Code Online (Sandbox Code Playgroud)

我试过在 …

python string series dataframe pandas

5
推荐指数
1
解决办法
4855
查看次数

如何在循环中使用pandas string contains(str.contain)?

我有一个带有A列的pandas df,它是一串字符串.系列中的每个项目(即数据库中的每一行)只是一个长字符串,以逗号分隔.我想创建一个名为B的新列,每次从A列的每一行中出现一个单独列表中的对象时,该列会递增计数.例如:

我的列表看起来像这样:

list = ('dog', 'bird', 'cat')
Run Code Online (Sandbox Code Playgroud)

我的数据框看起来像这样:

A                           B
dog, bird                   2
cat, bird                   2
dog, snake                  1
cat, bird, snake            2
dog, bird, cat, snake       3
dog, bird cat               3
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个执行以下操作的嵌套循环:从df.a [0]开始(即df.A的第一个值),找出它是否包含列表的第一个值(即'dog') .如果df.A [0]包含,则将1添加到B.然后,保持在df.A的同一行中,继续到列表的第二个值(即'bird').如果df.A [0]也包含该值,则将另外1添加到B. etc等.

这是我正在尝试使用的代码.

for i in df['A']:
    for j in list:
        if i.str.contains(j):
            df['B'] += 1
Run Code Online (Sandbox Code Playgroud)

但是,我一直收到错误:

'str' object has no attribute 'str'
Run Code Online (Sandbox Code Playgroud)

我如何告诉熊猫看整个系列,同时还告诉它作为一个具有上述结构的循环?或者,解决这个问题的最佳方法是什么?

python string dataframe pandas

2
推荐指数
1
解决办法
1623
查看次数

熊猫在另一个系列的一个系列中找到超级弦

这不一定要在熊猫中完成,但如果可以在熊猫中完成它会很好.

假设我有一个列表或一系列字符串:

['XXY8779','0060-19','McChicken','456728']
Run Code Online (Sandbox Code Playgroud)

我有另一个列表或系列包含原始的子字符串,如下所示:

['60-19','Chicken','8779','1124231','92871','johnson']
Run Code Online (Sandbox Code Playgroud)

这会返回类似于:

[True, True, True, False]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个匹配的东西:

^[a-zA-Z0-9.,$;]+ < matching string in other list >
Run Code Online (Sandbox Code Playgroud)

换句话说,从一个或多个任何字符开始,但其余字符与我的其他列表中的一个字符串完全匹配.

有没有人对完成此任务的最佳方法有任何想法?

谢谢!

python regex string substring pandas

1
推荐指数
1
解决办法
82
查看次数