相关疑难解决方法(0)

如何根据部分匹配选择DataFrame列?

今天下午我正在努力寻找一种方法来选择我的Pandas DataFrame的几列,通过检查名称中某个模式的出现(标签?).

我一直在寻找类似containsisinnd.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的新手,从来没有真正编程任何东西,所以我不太熟悉速度/时间/效率,但我倾向于认为第二种方法 - 使用地图 - 可能会更快,除了看起来更优雅我的未经训练眼睛.

我很想知道你对它的看法,以及可能的替代方案.考虑到我的高唱水平,如果你能纠正我在代码中犯下的任何错误并指出正确的方向,我将非常感激.

谢谢,米歇尔

编辑 …

python pandas

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

使用熊猫查询按部分字符串选择行

我有一个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")]但我更喜欢使用查询。

python dataframe pandas

7
推荐指数
2
解决办法
3106
查看次数

从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

我有一个清单:

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().

我对编码很新,所以答案中的解释和细节越多越好!提前致谢.

python pandas

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

如何过滤包含列表中任何字符串的 Pandas Dataframe 行?

我有具有以下值的数据框:

  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)

我该怎么办?

python search filter dataframe pandas

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

只保留包含字符串列表中的字符串的 df 列值

我有一个像这样的字符串列表:

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)

我刚开始使用正则表达式,因此在解决它时遇到了一些麻烦,希望得到一些帮助。

python dataframe python-3.x pandas python-re

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

在Pandas中切片时的值错误

我有一个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)

python pandas

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

使用行pandas python上的部分字符串匹配返回DataFrame项

我有一个包含两列的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执行此操作,但首先我需要使用部分字符串匹配返回(行)索引的方法.那就是我被困住的地方.我知道如何在列标题上运行部分字符串匹配,但我找不到在该列中的元素(或整个数据帧)上运行它的方法.有任何想法吗?

提前谢谢了.

python string match pandas

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

使用字符串搜索Pandas系列会产生KeyError

我正在尝试使用df[df['col'].str.contains("string")](在这两个SO问题中描述:12)来基于部分字符串匹配来选择行.这是我的代码:

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 match python-2.7 pandas

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

Pandas str.contains-在字符串中搜索多个值并在新列中打印这些值

我刚刚开始使用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)

python string pandas

3
推荐指数
2
解决办法
6217
查看次数

如果行包含 Pandas 中的特定值,则删除列

我开始学习熊猫。我在这里看到了很多问题,人们问如果列匹配特定值,如何删除行。

就我而言,情况正好相反。想象一下有这个数据框:

数据框

您想知道的是,如果任何列在其任何一行中有 value salty,则应删除该列,结果是:

数据框 2

我已经尝试过与此有几个相似之处:

if df.loc[df['A'] == 'salty']:
   df.drop(df.columns[0], axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)

但是我在查找有关如何根据该列的行值删除列的文档方面非常迷茫。该代码是查找特定列并始终删除第一列的组合(因为我的想法是在for循环中的所有列中搜索该列中一行的值。

python dataframe pandas

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

Python Pandas:如何在列中搜索字符串?

我有一个像这样的数据帧:

col1,col2
Sam,NL
Man,NL-USA
ho,CA-CN
Run Code Online (Sandbox Code Playgroud)

我想选择第二列包含单词“NL”的行,这类似于 SQLlike命令。有人知道 Python Pandas 中的类似命令吗?

python numpy dataframe pandas

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

在python中选择等于子字符串的列

我的数据框看起来像这样

  1. clients4.google.com
  2. m.facebook.com
  3. static.ak.fbcdn.net
  4. static.ak.fbcdn.net
  5. static.ak.fbcdn.net

我想选择子字符串fb可用的所有行.在熊猫数据框中

python dataframe pandas

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

标签 统计

pandas ×12

python ×12

dataframe ×6

match ×2

string ×2

filter ×1

numpy ×1

python-2.7 ×1

python-3.x ×1

python-re ×1

search ×1