是否有任何功能相当于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)
有一个更好的方法吗?
我想知道是否有更有效的方法在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)
有没有快速的方法来做到这一点?感谢您的帮助,我是初学者,但我喜欢数据争夺的熊猫.
我使用以下字母表生成了一个字符串.
{A,C,G,T}.我的字符串包含超过10000个字符.我正在搜索以下模式.
我已经要求使用具有O(m+n)运行时间的字符串匹配算法.
m = pattern length
n = text length
Run Code Online (Sandbox Code Playgroud)
两者KMP and Rabin-Karp algorithms都有这个运行时间.在这种情况下,最合适的算法(Rabin-Carp和KMP之间)是什么?
我有这样的文件:
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) 我有一个 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 函数,但这仅适用于整个字符串,不适用于我的子字符串。
我有一个大小为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,我需要为数百万的数据集应用此代码.所以有人能告诉我如何减少执行时间吗?还有其他方法可以完成任务吗?
总菜鸟在这里,对不起初学者的问题。我一直在 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)
我试过在 …
我有一个带有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)
我如何告诉熊猫看整个系列,同时还告诉它作为一个具有上述结构的循环?或者,解决这个问题的最佳方法是什么?
这不一定要在熊猫中完成,但如果可以在熊猫中完成它会很好.
假设我有一个列表或一系列字符串:
['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)
换句话说,从一个或多个任何字符开始,但其余字符与我的其他列表中的一个字符串完全匹配.
有没有人对完成此任务的最佳方法有任何想法?
谢谢!