相关疑难解决方法(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万
查看次数

如果列中的值位于设置的值列表中,则过滤数据帧行

我有一个Python pandas DataFrame rpt:

rpt
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 47518 entries, ('000002', '20120331') to ('603366', '20091231')
Data columns:
STK_ID                    47518  non-null values
STK_Name                  47518  non-null values
RPT_Date                  47518  non-null values
sales                     47518  non-null values
Run Code Online (Sandbox Code Playgroud)

我可以过滤库存ID '600809'如下的行:rpt[rpt['STK_ID'] == '600809']

<class 'pandas.core.frame.DataFrame'>
MultiIndex: 25 entries, ('600809', '20120331') to ('600809', '20060331')
Data columns:
STK_ID                    25  non-null values
STK_Name                  25  non-null values
RPT_Date                  25  non-null values
sales                     25  non-null values
Run Code Online (Sandbox Code Playgroud)

我想把一些股票的所有行放在一起,例如['600809','600141','600329'].这意味着我想要这样的语法:

stk_list = ['600809','600141','600329']

rst = rpt[rpt['STK_ID'] in stk_list] # …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

378
推荐指数
7
解决办法
27万
查看次数

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万
查看次数

Python中的波形符运算符

Python中代字号运算符的用法是什么?

我能想到的一件事是在字符串或列表的两边做一些事情,比如检查字符串是否是回文符号:

def is_palindromic(s):
    return all(s[i] == s[~i] for i in range(len(s) / 2)) 
Run Code Online (Sandbox Code Playgroud)

还有其他好用吗?

python operators

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

pandas获取不在其他数据帧中的行

我有两个pandas数据框,它们有一些共同的行.

假设dataframe2是dataframe1的子集.

如何获取不在dataframe2中的dataframe1行?

df1 = pandas.DataFrame(data = {'col1' : [1, 2, 3, 4, 5], 'col2' : [10, 11, 12, 13, 14]}) 
df2 = pandas.DataFrame(data = {'col1' : [1, 2, 3], 'col2' : [10, 11, 12]})
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

180
推荐指数
9
解决办法
15万
查看次数

对于有熊猫的循环 - 我什么时候应该关心?

我熟悉"矢量化"的概念,以及熊猫如何使用矢量化技术来加速计算.矢量化函数在整个系列或DataFrame上广播操作,以实现比传统迭代数据更大的加速.

但是,我很惊讶地看到很多代码(包括Stack Overflow的答案)提供了解决问题的方法,这些问题涉及使用for循环和列表推导来循环数据.阅读完文档后,对API有了不错的理解,我认为循环是"坏的",并且应该"永远"迭代数组,系列或DataFrame.那么,为什么我会不时地看到用户提出循环解决方案呢?

因此,要总结......我的问题是:
是否for循环真正的"坏"?如果不是,在什么情况下它们会比使用更传统的"矢量化"方法更好?1

1 - 虽然这个问题确实听起来有点宽泛,但事实是,当for循环通常比传统的迭代数据更好时,存在非常具体的情况.这篇文章旨在为后人捕捉这一点.

python iteration list-comprehension vectorization pandas

85
推荐指数
2
解决办法
7819
查看次数

根据"不在"条件从数据框中删除行

当日期列的值在日期列表中时,我想从pandas数据帧中删除行.以下代码不起作用:

a=['2015-01-01' , '2015-02-01']

df=df[df.datecolumn not in a]
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

python pandas

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

删除不是.isin('X')的行

对不起只是进入熊猫,这似乎应该是一个非常直截了当的问题.我如何使用isin('X')删除的行是在列表中X?在RI会写!which(a %in% b).

python filtering pandas

56
推荐指数
4
解决办法
6万
查看次数

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中使用ELIF创建列

我无法根据其他两列中的值来确定如何创建新的DataFrame列.我需要使用if/elif/else逻辑.但我发现的所有文档和示例只显示if/else逻辑.这是我想要做的一个示例:

df['combo'] = 'mobile' if (df['mobile'] == 'mobile') elif (df['tablet'] =='tablet') 'tablet' else 'other')
Run Code Online (Sandbox Code Playgroud)

我也愿意使用where().只是找不到合适的语法.

python pandas

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