相关疑难解决方法(0)

使用值列表从pandas数据框中选择行

可能重复:
如何通过"within"/"in"过滤pandas的数据帧行?

假设我有以下pandas数据帧:

df = DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3, 5]})
df

     A   B
0    5   1
1    6   2
2    3   3
3    4   5
Run Code Online (Sandbox Code Playgroud)

我可以根据特定值进行子集化:

x = df[df['A'] == 3]
x

     A   B
2    3   3
Run Code Online (Sandbox Code Playgroud)

但是我如何根据值列表进行子集化? - 这样的事情:

list_of_values = [3,6]

y = df[df['A'] in list_of_values]
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

603
推荐指数
5
解决办法
56万
查看次数

如何在Pandas中处理SettingWithCopyWarning?

背景

我刚刚将我的Pandas从0.11升级到0.13.0rc1.现在,该应用程序正在弹出许多新的警告.其中一个是这样的:

E:\FinReporter\FM_EXT.py:449: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
  quote_df['TVol']   = quote_df['TVol']/TVOL_SCALE
Run Code Online (Sandbox Code Playgroud)

我想知道究竟是什么意思?我需要改变什么吗?

如果我坚持使用,我应该如何暂停警告quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE

给出错误的函数

def _decode_stock_quote(list_of_150_stk_str):
    """decode the webpage and return dataframe"""

    from cStringIO import StringIO

    str_of_all = "".join(list_of_150_stk_str)

    quote_df = pd.read_csv(StringIO(str_of_all), sep=',', names=list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg')) #dtype={'A': object, 'B': object, 'C': np.float64}
    quote_df.rename(columns={'A':'STK', 'B':'TOpen', 'C':'TPCLOSE', 'D':'TPrice', 'E':'THigh', 'F':'TLow', 'I':'TVol', 'J':'TAmt', 'e':'TDate', 'f':'TTime'}, inplace=True)
    quote_df = quote_df.ix[:,[0,3,2,1,4,5,8,9,30,31]]
    quote_df['TClose'] = quote_df['TPrice']
    quote_df['RT'] …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas chained-assignment

536
推荐指数
16
解决办法
58万
查看次数

根据列值删除Pandas中的DataFrame行

我有以下DataFrame:

             daysago  line_race rating        rw    wrating
 line_date                                                 
 2007-03-31       62         11     56  1.000000  56.000000
 2007-03-10       83         11     67  1.000000  67.000000
 2007-02-10      111          9     66  1.000000  66.000000
 2007-01-13      139         10     83  0.880678  73.096278
 2006-12-23      160         10     88  0.793033  69.786942
 2006-11-09      204          9     52  0.636655  33.106077
 2006-10-22      222          8     66  0.581946  38.408408
 2006-09-29      245          9     70  0.518825  36.317752
 2006-09-16      258         11     68  0.486226  33.063381
 2006-08-30      275          8     72  0.446667  32.160051
 2006-02-11      475          5     65  0.164591  10.698423
 2006-01-13      504          0     70  0.142409   9.968634
 2006-01-02 …
Run Code Online (Sandbox Code Playgroud)

python pandas

441
推荐指数
12
解决办法
67万
查看次数

系列的真值是模棱两可的.使用a.empty,a.bool(),a.item(),a.any()或a.all()

问题是使用or条件过滤我的结果数据帧.我希望我的结果df提取var高于0.25且低于-0.25的所有列值.下面的这个逻辑给了我一个模糊的真值,但是当我在两个单独的操作中分割这个过滤时它可以工作.这里发生了什么?不知道在哪里使用建议a.empty(), a.bool(), a.item(),a.any() or a.all().

 result = result[(result['var']>0.25) or (result['var']<-0.25)]
Run Code Online (Sandbox Code Playgroud)

python filtering boolean dataframe pandas

286
推荐指数
6
解决办法
49万
查看次数

从多指数熊猫中选择

我有一个带有"A"和"B"列的多索引数据框.

是否有一种方法可以通过过滤多索引的一列来选择行,而无需将索引重置为单列索引.

例如.

# has multi-index (A,B)
df
#can I do this? I know this doesn't work because the index is multi-index so I need to     specify a tuple

df.ix[df.A ==1]
Run Code Online (Sandbox Code Playgroud)

python multi-index dataframe pandas

77
推荐指数
7
解决办法
9万
查看次数

Python:熊猫系列 - 为什么要使用loc?

为什么我们将'loc'用于pandas数据帧?似乎以下代码使用或不使用loc编译anr以相同的速度运行

%timeit df_user1 = df.loc[df.user_id=='5561']

100 loops, best of 3: 11.9 ms per loop
Run Code Online (Sandbox Code Playgroud)

要么

%timeit df_user1_noloc = df[df.user_id=='5561']

100 loops, best of 3: 12 ms per loop
Run Code Online (Sandbox Code Playgroud)

那么为什么要使用loc?

编辑:这已被标记为重复的问题.但是,虽然pandas iloc vs ix vs loc解释?确实提到*

你可以只使用数据框的getitem进行列检索 :

*

df['time']    # equivalent to df.loc[:, 'time']
Run Code Online (Sandbox Code Playgroud)

它没有说明为什么我们使用loc,虽然它确实解释了loc的许多功能,但我的具体问题是"为什么不完全省略loc"?我已经接受了以下非常详细的答案.

还有其他帖子的答案(我认为不是答案)在讨论中非常隐藏,任何寻找我正在寻找的人都会发现很难找到信息,而且提供的答案会更好我的问题.

python series loc pandas

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

Pandas pd.Series.isin性能与集合与数组

在Python中,一般来说,可散列集合的成员资格最好通过测试set.我们知道这一点,因为哈希的使用为我们提供了O(1)查找复杂度,而O(n)为listnp.ndarray.

在Pandas中,我经常需要检查非常大的集合中的成员资格.我推测同样适用,即检查一个系列中的每个项目的成员资格set比使用list或更有效np.ndarray.但是,情况似乎并非如此:

import numpy as np
import pandas as pd

np.random.seed(0)

x_set = {i for i in range(100000)}
x_arr = np.array(list(x_set))
x_list = list(x_set)

arr = np.random.randint(0, 20000, 10000)
ser = pd.Series(arr)
lst = arr.tolist()

%timeit ser.isin(x_set)                   # 8.9 ms
%timeit ser.isin(x_arr)                   # 2.17 ms
%timeit ser.isin(x_list)                  # 7.79 ms
%timeit np.in1d(arr, x_arr)               # 5.02 ms
%timeit [i in x_set for i in lst]         # 1.1 ms
%timeit …
Run Code Online (Sandbox Code Playgroud)

python performance numpy series pandas

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

如何在熊猫中选择和存储大于数字的列?

我有一个带有整数列的pandas DataFrame.我想要包含大于10的数字的行.我可以通过执行以下操作来评估True或False而不是实际值:

df['ints'] = df['ints'] > 10
Run Code Online (Sandbox Code Playgroud)

我不经常使用Python,所以我会围绕这个圈子.

我花了20分钟谷歌搜索但未能找到我需要的东西....

编辑:

    observationID   recordKey   gridReference   siteKey siteName    featureKey  startDate   endDate pTaxonVersionKey    taxonName   authority   commonName  ints
0   463166539   1767    SM90    NaN NaN 150161  12/02/2006  12/02/2006  NBNSYS0100004720    Pipistrellus pygmaeus   (Leach, 1825)   Soprano Pipistrelle 2006
1   463166623   4325    TL65    NaN NaN 168651  21/12/2008  21/12/2008  NHMSYS0020001355    Pipistrellus pipistrellus sensu stricto (Schreber, 1774)    Common Pipistrelle  2008
2   463166624   4326    TL65    NaN NaN 168651  18/01/2009  18/01/2009  NHMSYS0020001355    Pipistrellus pipistrellus sensu stricto (Schreber, 1774)    Common Pipistrelle  2009
3   463166625 …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

如果Pandas数据框中的特定列中存在空值,则删除行

在此输入图像描述

我是蟒蛇熊猫新手.需要一些帮助来删除有空值的几行.在屏幕截图中,我需要使用python pandas删除charge_per_line =的行.谢谢 !!

python filter series dataframe pandas

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

如何通过字符串匹配加快pandas行过滤?

我经常需要过滤大熊猫据帧df通过df[df['col_name']=='string_value'],我想加快行selction操作,是有一个快速的方法来做到这一点?

例如,

In [1]: df = mul_df(3000,2000,3).reset_index()

In [2]: timeit df[df['STK_ID']=='A0003']
1 loops, best of 3: 1.52 s per loop
Run Code Online (Sandbox Code Playgroud)

可以缩短1.52s吗?

注意:

mul_df() 是创建多级数据框的功能:

>>> mul_df(4,2,3)
                 COL000  COL001  COL002
STK_ID RPT_Date                        
A0000  B000      0.6399  0.0062  1.0022
       B001     -0.2881 -2.0604  1.2481
A0001  B000      0.7070 -0.9539 -0.5268
       B001      0.8860 -0.5367 -2.4492
A0002  B000     -2.4738  0.9529 -0.9789
       B001      0.1392 -1.0931 -0.2077
A0003  B000     -1.1377  0.5455 -0.2290
       B001      1.0083  0.2746 -0.3934
Run Code Online (Sandbox Code Playgroud)

下面是mul_df()的代码:

import itertools
import numpy as np
import pandas …
Run Code Online (Sandbox Code Playgroud)

python filter pandas

9
推荐指数
2
解决办法
6122
查看次数