今天下午我正在努力寻找一种方法来选择我的Pandas DataFrame的几列,通过检查名称中某个模式的出现(标签?).
我一直在寻找类似contains或isin为nd.arrays/的东西pd.series,但没有运气.
这让我很沮丧,因为我已经检查了我的列中DataFrame是否出现了特定的字符串模式,如:
hp = ~(df.target_column.str.contains('some_text') | df.target_column.str.contains('other_text'))
df_cln= df[hp]
Run Code Online (Sandbox Code Playgroud)
然而,无论我如何撞击我的头,我都无法申请.str.contains()返回的对象df.columns- 这是一个Index- 也不是返回的对象df.columns.values- 这是一个ndarray.这适用于"切片"操作返回的内容df[column_name],即a Series.
我的第一个解决方案涉及for循环和创建帮助列表:
ll = []
for a in df.columns:
if a.startswith('start_exp1') | a.startswith('start_exp2'):
ll.append(a)
df[ll]
Run Code Online (Sandbox Code Playgroud)
(str当然,可以应用任何功能)
然后,我找到了该map函数,并使用以下代码:
import re
sel = df.columns.map(lambda x: bool(re.search('your_regex',x))
df[df.columns[sel]]
Run Code Online (Sandbox Code Playgroud)
当然,在第一个解决方案中,我可以执行相同类型的正则表达式检查,因为我可以将它应用于str迭代返回的数据类型.
我是Python的新手,从来没有真正编程任何东西,所以我不太熟悉速度/时间/效率,但我倾向于认为第二种方法 - 使用地图 - 可能会更快,除了看起来更优雅我的未经训练眼睛.
我很想知道你对它的看法,以及可能的替代方案.考虑到我的高唱水平,如果你能纠正我在代码中犯下的任何错误并指出正确的方向,我将非常感激.
谢谢,米歇尔
编辑 …
我有一个DataFrame。1列(name)具有字符串值。我想知道是否有一种方法使用该DataFrame.query()方法根据与特定列匹配的部分字符串选择行。
我试过了:
df.query('name.str.contains("lu")')。错误消息:“ TypeError:'系列'对象是可变的,因此不能被散列”df.query('"lu" in name')。返回一个空值DataFrame。我使用的代码:
import pandas as pd
df = pd.DataFrame({
'name':['blue','red','blue'],
'X1':[96.32,96.01,96.05]
}, columns=['name','X1'])
print(df.query('"lu" in name').head())
print(df.query('name.str.contains("lu")').head())
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用,df[df['name'].str.contains("lu")]但我更喜欢使用查询。
我有一个清单:
things = ['A1','B2','C3']
Run Code Online (Sandbox Code Playgroud)
我有一个pandas数据框,其中一列包含以分号分隔的值 - 一些行将包含与上面列表中的一个项匹配的匹配(由于它具有字符串的其他部分,因此不会完美匹配)列...例如,该列中的一行可能有'哇;这里;这= A1 ; 10001; 0')
我想保存包含与列表中的项匹配的行,然后使用这些选定的行创建一个新的数据框(应该具有相同的标题).这是我试过的:
import re
for_new_df =[]
for x in df['COLUMN']:
for mp in things:
if df[df['COLUMN'].str.contains(mp)]:
for_new_df.append(mp) #This won't save the whole row - help here too, please.
Run Code Online (Sandbox Code Playgroud)
这段代码给了我一个错误:
ValueError:DataFrame的真值是不明确的.使用a.empty,a.bool(),a.item(),a.any()或a.all().
我对编码很新,所以答案中的解释和细节越多越好!提前致谢.
我有具有以下值的数据框:
A B
["I need avocado" "something"]
["something" "I eat margarina"]
Run Code Online (Sandbox Code Playgroud)
我想找到以下行:
在任何行的列,列的值包含在列表中。例如,对于列表:
["apple","avocado","bannana"]
Run Code Online (Sandbox Code Playgroud)
只有这一行应该匹配:[“我需要鳄梨”“东西”]
这条线不起作用:
dataFiltered[dataFiltered[col].str.contains(*includeKeywords)]
Run Code Online (Sandbox Code Playgroud)
返回:
{TypeError}unsupported operand type(s) for &: 'str' and 'int'
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我有一个像这样的字符串列表:
stringlist = [JAN, jan, FEB, feb, mar]
Run Code Online (Sandbox Code Playgroud)
我有一个如下所示的数据框:
**date** **value**
01MAR16 1
05FEB16 12
10jan17 5
10mar15 9
03jan05 7
04APR12 3
Run Code Online (Sandbox Code Playgroud)
我只想保留包含 stringlist 中一个字符串的日期,结果应如下所示:
**date** **value**
NA 1
05FEB16 12
10jan17 5
10mar15 9
03jan05 7
NA 3
Run Code Online (Sandbox Code Playgroud)
我刚开始使用正则表达式,因此在解决它时遇到了一些麻烦,希望得到一些帮助。
我有一个DataFrame,我想使用'str.contrains()'方法.当我读到pandas + dataframe时,我相信我已经找到了如何做到这一点- 通过部分字符串选择.但是,我一直得到一个值错误.
我的DataFrame如下:
ID,ENROLLMENT_DATE,TRAINER_MANAGING,TRAINER_OPERATOR,FIRST_VISIT_DATE
1536D,12-Feb-12,"06DA1B3-Lebanon NH",,15-Feb-12
F15D,18-May-12,"06405B2-Lebanon NH",,25-Jul-12
8096,8-Aug-12,"0643D38-Hanover NH","0643D38-Hanover NH",25-Jun-12
A036,1-Apr-12,"06CB8CF-Hanover NH","06CB8CF-Hanover NH",9-Aug-12
8944,19-Feb-12,"06D26AD-Hanover NH",,4-Feb-12
1004E,8-Jun-12,"06388B2-Lebanon NH",,24-Dec-11
11795,3-Jul-12,"0649597-White River VT","0649597-White River VT",30-Mar-12
30D7,11-Nov-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",30-Nov-11
3AE2,21-Feb-12,"06405B2-Lebanon NH",,26-Oct-12
B0FE,17-Feb-12,"06D1B9D-Hartland VT",,16-Feb-12
127A1,11-Dec-11,"064456E-Hanover NH","064456E-Hanover NH",11-Nov-12
161FF,20-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",3-Jul-12
A036,30-Nov-11,"063B208-Randolph VT","063B208-Randolph VT",
475B,25-Sep-12,"06D26AD-Hanover NH",,5-Nov-12
151A3,7-Mar-12,"06388B2-Lebanon NH",,16-Nov-12
CA62,3-Jan-12,,,
D31B,18-Dec-11,"06405B2-Lebanon NH",,9-Jan-12
20F5,8-Jul-12,"0669C50-Randolph VT",,3-Feb-12
8096,19-Dec-11,"0649597-White River VT","0649597-White River VT",9-Apr-12
14E48,1-Aug-12,"06D3206-Hanover NH",,
177F8,20-Aug-12,"063B208-Randolph VT","063B208-Randolph VT",5-May-12
553E,11-Oct-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",8-Mar-12
12D5F,18-Jul-12,"0649597-White River VT","0649597-White River VT",2-Nov-12
C6DC,13-Apr-12,"06388B2-Lebanon NH",,
11795,27-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",19-Jun-12
17B43,11-Aug-12,,,22-Oct-12
A036,11-Aug-12,"06D3206-Hanover NH",,19-Jun-12 …Run Code Online (Sandbox Code Playgroud) 我有一个包含两列的Dataframe,一列中包含字符串,另一列中包含列表,如下所示:
RSD_TYPE FILTER LIST
0 AQ500 [N/A, Z mean, SNR mean, Dir mean]
1 Triton [wipe mean, Z mean, Avail mean, Dir mean]
2 Windcube [N/A, W mean, Q mean, Dir mean]
3 Zephir [Rain mean, W mean, Packets, dir mean]
Run Code Online (Sandbox Code Playgroud)
我想基于与RSD_TYPE列的元素的部分字符串匹配返回一个列表.EG搜索哪一行与"AQ5"具有部分字符串匹配,然后从该行返回相应的列表项,在这种情况下为[N/A,Z均值,SNR均值,Dir均值].
计划是使用.get_value执行此操作,但首先我需要使用部分字符串匹配返回(行)索引的方法.那就是我被困住的地方.我知道如何在列标题上运行部分字符串匹配,但我找不到在该列中的元素(或整个数据帧)上运行它的方法.有任何想法吗?
提前谢谢了.
我正在尝试使用df[df['col'].str.contains("string")](在这两个SO问题中描述:1和2)来基于部分字符串匹配来选择行.这是我的代码:
import requests
import json
import pandas as pd
import datetime
url = "http://api.turfgame.com/v4/zones/all" # get request returns .json
r = requests.get(url)
df = pd.read_json(r.content) # create a df containing all zone info
print df[df['region'].str.contains("Uppsala")].head()
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-23-55bbf5679808> in <module>()
----> 1 print df[df['region'].str.contains("Uppsala")].head()
C:\Users\User\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\frame.pyc in __getitem__(self, key)
1670 if isinstance(key, (Series, np.ndarray, list)):
1671 # either boolean or fancy integer index
-> 1672 return self._getitem_array(key)
1673 elif isinstance(key, …Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用Python进行编码,并希望构建一个解决方案,在该解决方案中,您将搜索字符串以查看其是否包含一组给定的值。
我在R中找到了一个类似的解决方案,该解决方案使用Stringr库:在字符串中搜索值,如果该值存在,则将其全部打印在新列中
以下代码似乎有效,但我也想输出我要查找的三个值,而此解决方案将仅输出一个值:
#Inserting new column
df.insert(5, "New_Column", np.nan)
#Searching old column
df['New_Column'] = np.where(df['Column_with_text'].str.contains('value1|value2|value3', case=False, na=False), 'value', 'NaN')
Run Code Online (Sandbox Code Playgroud)
------编辑------
所以我意识到我没有给出很好的解释,对此感到抱歉。
下面是一个示例,其中我匹配字符串中的水果名称,并且取决于它是否在字符串中找到任何匹配项,它将在新列中打印true或false。这是我的问题:我不想打印出true或false而是打印出它在字符串中找到的名称。苹果,橘子等
import pandas as pd
import numpy as np
text = [('I want to buy some apples.', 0),
('Oranges are good for the health.', 0),
('John is eating some grapes.', 0),
('This line does not contain any fruit names.', 0),
('I bought 2 blueberries yesterday.', 0)]
labels = ['Text','Random Column']
df = pd.DataFrame.from_records(text, columns=labels)
df.insert(2, "MatchedValues", np.nan)
foods …Run Code Online (Sandbox Code Playgroud) 我开始学习熊猫。我在这里看到了很多问题,人们问如果列匹配特定值,如何删除行。
就我而言,情况正好相反。想象一下有这个数据框:
您想知道的是,如果任何列在其任何一行中有 value salty,则应删除该列,结果是:
我已经尝试过与此有几个相似之处:
if df.loc[df['A'] == 'salty']:
df.drop(df.columns[0], axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)
但是我在查找有关如何根据该列的行值删除列的文档方面非常迷茫。该代码是查找特定列并始终删除第一列的组合(因为我的想法是在for循环中的所有列中搜索该列中一行的值。
我有一个像这样的数据帧:
col1,col2
Sam,NL
Man,NL-USA
ho,CA-CN
Run Code Online (Sandbox Code Playgroud)
我想选择第二列包含单词“NL”的行,这类似于 SQLlike命令。有人知道 Python Pandas 中的类似命令吗?
我想选择子字符串fb可用的所有行.在熊猫数据框中