我有一个DataFrame
4列,其中2列包含字符串值.我想知道是否有办法根据与特定列的部分字符串匹配来选择行?
换句话说,函数或lambda函数会做类似的事情
re.search(pattern, cell_in_question)
Run Code Online (Sandbox Code Playgroud)
返回一个布尔值.我熟悉语法,df[df['A'] == "hello world"]
但似乎无法找到一种方法来做同样的部分字符串匹配说'hello'
.
有人能指出我正确的方向吗?
我想使用来自用户的输入作为搜索某些文本的正则表达式模式.它有效,但我如何处理用户放置在正则表达式中有意义的字符的情况?例如,用户想要搜索Word (s)
:正则表达式引擎将(s)
作为一个组.我希望它像一个字符串一样对待它"(s)"
.我可以运行replace
用户输入并替换(
with \(
和)
with \)
但问题是我需要替换每个可能的正则表达式符号.你知道更好的方法吗?
我需要过滤pandas
数据框中的行,以便特定的字符串列包含至少一个提供的子字符串列表.子字符串可能包含异常/正则表达式字符.比较不应涉及正则表达式,并且不区分大小写.
例如:
lst = ['kdSj;af-!?', 'aBC+dsfa?\-', 'sdKaJg|dksaf-*']
Run Code Online (Sandbox Code Playgroud)
我目前正在应用这样的面具:
mask = np.logical_or.reduce([df[col].str.contains(i, regex=False, case=False) for i in lst])
df = df[mask]
Run Code Online (Sandbox Code Playgroud)
我的数据帧很大(约1十亿行),lst
长度为100.是否有更有效的方法?例如,如果lst
找到第一个项目,我们不应该测试该行的任何后续字符串.
df(Pandas Dataframe)有三行.
some_col_name
"apple is delicious"
"banana is delicious"
"apple and banana both are delicious"
Run Code Online (Sandbox Code Playgroud)
df.col_name.str.contains("apple|banana")
将捕获所有行:
"apple is delicious",
"banana is delicious",
"apple and banana both are delicious".
Run Code Online (Sandbox Code Playgroud)
如何在str.contains方法上应用AND运算符,以便它只捕获包含苹果和香蕉的字符串?
"apple and banana both are delicious"
Run Code Online (Sandbox Code Playgroud)
我想抓住包含10-20个不同单词的字符串(葡萄,西瓜,浆果,橙子,......等)
我试图检查python列中是否包含某个值.我正在使用df.date.isin(['07311954'])
,我不怀疑它是一个很好的工具.问题是我有超过350K的行,输出不会显示所有这些,所以我可以看到该值是否实际包含.简而言之,我只想知道(Y/N)列中是否包含特定值.我的代码如下:
import numpy as np
import pandas as pd
import glob
df = (pd.read_csv('/home/jayaramdas/anaconda3/Thesis/FEC_data/itpas2_data/itpas214.txt',\
sep='|', header=None, low_memory=False, names=['1', '2', '3', '4', '5', '6', '7', \
'8', '9', '10', '11', '12', '13', 'date', '15', '16', '17', '18', '19', '20', \
'21', '22']))
df.date.isin(['07311954'])
Run Code Online (Sandbox Code Playgroud) 我有一个特殊字符列表。例如
BAD_CHARS = ['.', '&', '\(', '\)', ';', '-']
Run Code Online (Sandbox Code Playgroud)
我想从 pandas 数据帧列中删除包含这些特殊字符的所有行。目前我正在做以下事情
df = '''
words frequency
& 11
CONDUCTED 3
(E.G., 5
EXPERIMENT 6
(VS. 5
(WARD 3
- 14
2006; 3
3D 5
ABLE 5
ABSTRACT 3
ACCOMPANIED 5
ACTIVITY 11
AD 5
ADULTS 6
'''
for char in BAD_CHARS:
df = df[~df['word'].str.contains(char)]
# Expected Result
words frequency
CONDUCTED 3
EXPERIMENT 6
3D 5
ABLE 5
ABSTRACT 3
ACCOMPANIED 5
ACTIVITY 11
AD 5
ADULTS 6
Run Code Online (Sandbox Code Playgroud)
首先它不起作用,其次我猜它不快。那么我怎样才能以更快的方式做到这一点呢?谢谢
我想扩展这里提出的问题
上述问题中的解决方案返回 True 或 False。布尔值可用于对正确值进行子集化。
但是,我想获取与子字符串匹配的搜索值。
例如,(借用上面的问题)
s = pd.Series(['cat','hat','dog','fog','pet'])
searchfor = ['og', 'at']
Run Code Online (Sandbox Code Playgroud)
我想知道 'cat' 与 'at' 匹配,dog 与 'og' 匹配
我有一个这样的数据框,
Name Product Quantity
0 NaN 1010 10
1 NaN 2010 12
2 NaN 4145 18
3 NaN 5225 14
4 Total 6223 16
5 RRA 7222 18
6 MLQ 5648 45
Run Code Online (Sandbox Code Playgroud)
现在,我需要提取包含行的行/新数据框,直到Total
该行位于列中Name
。
所需输出:
Name Product Quantity
0 NaN 1010 10
1 NaN 2010 12
2 NaN 4145 18
3 NaN 5225 14
Run Code Online (Sandbox Code Playgroud)
我试过这个,
df[df.Name.str.contains("Total", na=False)]
Run Code Online (Sandbox Code Playgroud)
目前这没有帮助。任何建议都会很棒。