相关疑难解决方法(0)

pandas + dataframe - 按部分字符串选择

我有一个DataFrame4列,其中2列包含字符串值.我想知道是否有办法根据与特定列的部分字符串匹配来选择行?

换句话说,函数或lambda函数会做类似的事情

re.search(pattern, cell_in_question) 
Run Code Online (Sandbox Code Playgroud)

返回一个布尔值.我熟悉语法,df[df['A'] == "hello world"]但似乎无法找到一种方法来做同样的部分字符串匹配说'hello'.

有人能指出我正确的方向吗?

python string dataframe pandas

356
推荐指数
12
解决办法
49万
查看次数

pandas:使用运算符链接过滤DataFrame行

在大部分操作pandas可以与运营商链接(来完成groupby,aggregate,apply,等),但我发现过滤行的唯一方法是通过正常的托架索引

df_filtered = df[df['column'] == value]
Run Code Online (Sandbox Code Playgroud)

这是没有吸引力的,因为它需要df在能够过滤其值之前分配给变量.有更像以下的东西吗?

df_filtered = df.mask(lambda x: x['column'] == value)
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

293
推荐指数
9
解决办法
48万
查看次数

Python Pandas:获取列匹配特定值的行的索引

给定一个带有"BoolCol"列的DataFrame,我们想要找到DataFrame的索引,其中"BoolCol"的值== True

我目前有迭代的方式来做到这一点,它完美地工作:

for i in range(100,3000):
    if df.iloc[i]['BoolCol']== True:
         print i,df.iloc[i]['BoolCol']
Run Code Online (Sandbox Code Playgroud)

但这不是正确的熊猫方式.经过一些研究,我目前正在使用此代码:

df[df['BoolCol'] == True].index.tolist()
Run Code Online (Sandbox Code Playgroud)

这个给了我一个索引列表,但是当我通过执行以下操作检查它们时它们不匹配:

df.iloc[i]['BoolCol']
Run Code Online (Sandbox Code Playgroud)

结果实际上是假的!!

这是正确的熊猫方式吗?

python indexing pandas

222
推荐指数
5
解决办法
59万
查看次数

使用pandas.DataFrame中的复杂条件进行选择

例如,我有简单的DF:

import pandas as pd
from random import randint

df = pd.DataFrame({'A': [randint(1, 9) for x in xrange(10)],
                   'B': [randint(1, 9)*10 for x in xrange(10)],
                   'C': [randint(1, 9)*100 for x in xrange(10)]})
Run Code Online (Sandbox Code Playgroud)

我可以使用Pandas的方法和习语从"A"中选择"B"的相应值大于50,"C" - 不等于900的值吗?

python pandas

204
推荐指数
4
解决办法
45万
查看次数

将多个过滤器应用于pandas DataFrame或Series的有效方法

我有一个场景,用户想要将几个过滤器应用于Pandas DataFrame或Series对象.本质上,我想有效地将​​一堆过滤(比较操作)链接在一起,这些过滤由用户在运行时指定.

过滤器应该是添加剂(也就是应用的每个应该是狭窄的结果).

我目前正在使用,reindex()但每次创建一个新对象并复制基础数据(如果我正确理解文档).因此,在过滤大型系列或DataFrame时,这可能非常低效.

我认为使用apply(),map()或类似的东西可能会更好.我对Pandas很陌生,尽管如此仍然试图将我的头脑包裹起来.

TL; DR

我想获取以下表单的字典,并将每个操作应用于给定的Series对象并返回"已过滤"的Series对象.

relops = {'>=': [1], '<=': [1]}
Run Code Online (Sandbox Code Playgroud)

很长的例子

我将从一个当前的例子开始,只是过滤一个Series对象.以下是我目前使用的功能:

   def apply_relops(series, relops):
        """
        Pass dictionary of relational operators to perform on given series object
        """
        for op, vals in relops.iteritems():
            op_func = ops[op]
            for val in vals:
                filtered = op_func(series, val)
                series = series.reindex(series[filtered])
        return series
Run Code Online (Sandbox Code Playgroud)

用户提供包含他们想要执行的操作的字典:

>>> df = pandas.DataFrame({'col1': [0, 1, 2], 'col2': [10, 11, 12]})
>>> print df
>>> print df
   col1  col2
0 …
Run Code Online (Sandbox Code Playgroud)

python algorithm pandas

121
推荐指数
5
解决办法
20万
查看次数

Pandas中布尔索引的逻辑运算符

我在Pandas中使用布尔索引.问题是为什么声明:

a[(a['some_column']==some_number) & (a['some_other_column']==some_other_number)]
Run Code Online (Sandbox Code Playgroud)

工作正常,而

a[(a['some_column']==some_number) and (a['some_other_column']==some_other_number)]
Run Code Online (Sandbox Code Playgroud)

存在错误?

例:

a=pd.DataFrame({'x':[1,1],'y':[10,20]})

In: a[(a['x']==1)&(a['y']==10)]
Out:    x   y
     0  1  10

In: a[(a['x']==1) and (a['y']==10)]
Out: ValueError: The truth value of an array with more than one element is ambiguous.     Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)

python filtering boolean dataframe pandas

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

pandas:索引数据框时的多个条件 - 意外行为

我通过两列中的值过滤数据框中的行.

由于某种原因,OR运算符的行为与我期望AND运算符的行为相反,反之亦然.

我的测试代码:

import pandas as pd

df = pd.DataFrame({'a': range(5), 'b': range(5) })

# let's insert some -1 values
df['a'][1] = -1
df['b'][1] = -1
df['a'][3] = -1
df['b'][4] = -1

df1 = df[(df.a != -1) & (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]

print pd.concat([df, df1, df2], axis=1,
                keys = [ 'original df', 'using AND (&)', 'using OR (|)',])
Run Code Online (Sandbox Code Playgroud)

结果如下:

      original df      using AND (&)      using OR (|)    
             a  b              a   b             a …
Run Code Online (Sandbox Code Playgroud)

python boolean-logic pandas

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

基于另一列pandas dataframe提取列值

我有点卡在另一个变量上提取一个变量条件的值.例如,以下数据帧:

A  B
p1 1
p1 2
p3 3
p2 4
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得A何时的价值B=3?每当我提取值时A,我得到一个对象,而不是一个字符串.

python dataframe pandas

86
推荐指数
5
解决办法
12万
查看次数

如何在Python Pandas中选择两个值之间的DataFrame中的行?

我试图修改一个DataFrame df只包含列中的值closing_price介于99和101之间的行,并尝试使用下面的代码执行此操作.

但是,我得到了错误

ValueError:Series的真值是不明确的.使用a.empty,a.bool(),a.item(),a.any()或a.all()

我想知道是否有办法在不使用循环的情况下执行此操作.

df = df[(99 <= df['closing_price'] <= 101)]
Run Code Online (Sandbox Code Playgroud)

python pandas

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

在pandas MultiIndex DataFrame中选择行

目标和动机

(x, y)API已经日益普及,多年来,然而,没有关于它的一切是完全理解在结构方面,工作和相关的操作.

一个重要的操作是过滤.过滤是一种常见的要求,但用例是多种多样的.因此,某些方法和功能将比其他用例更适用于某些用例.

总之,本文的目的是触及一些常见的过滤问题和用例,演示解决这些问题的各种不同方法,并讨论它们的适用性.本文试图解决的一些高级问题是

  • 基于单个值/标签切片
  • 基于来自一个或多个级别的多个标签进行切片
  • 过滤布尔条件和表达式
  • 哪种方法适用于什么情况

这些问题已分解为6个具体问题,如下所列.为简单起见,以下设置中的示例DataFrame仅具有两个级别,并且没有重复的索引键.提出问题的大多数解决方案可以推广到N级.

本文不会介绍如何创建MultiIndexes,如何对它们执行赋值操作,或任何与性能相关的讨论(这些是另一个时间的单独主题).


问题

问题1-6将在上下文中询问下面的设置.

mux = pd.MultiIndex.from_arrays([
    list('aaaabbbbbccddddd'),
    list('tuvwtuvwtuvwtuvw')
], names=['one', 'two'])

df = pd.DataFrame({'col': np.arange(len(mux))}, mux)

         col
one two     
a   t      0
    u      1
    v      2
    w      3
b   t      4
    u      5
    v      6
    w      7
    t      8
c   u      9
    v     10
d   w     11
    t     12
    u     13
    v     14
    w     15
Run Code Online (Sandbox Code Playgroud)

问题1:选择单个项目
如何在"1"级中选择"a"的行?

         col
one two     
a   t      0 …
Run Code Online (Sandbox Code Playgroud)

python slice multi-index dataframe pandas

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