问题是使用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) 我有一个沿着下面的数据框:
Type Set
1 A Z
2 B Z
3 B X
4 C Y
Run Code Online (Sandbox Code Playgroud)
我想在数据帧中添加另一列(或生成一系列)与数据帧相同的长度(=相等的记录/行数),如果Set ='Z'则设置颜色为绿色,如果Set =否则设置为'red' .
最好的方法是什么?
我有一个Series
包含布尔值的pandas 对象.如何获得包含NOT
每个值的逻辑的系列?
例如,考虑一个系列包含:
True
True
True
False
Run Code Online (Sandbox Code Playgroud)
我想要的系列将包含:
False
False
False
True
Run Code Online (Sandbox Code Playgroud)
这似乎应该相当简单,但显然我错了我的mojo =(
从数据框中删除重复列的最简单方法是什么?
我正在通过以下方式阅读具有重复列的文本文件:
import pandas as pd
df=pd.read_table(fname)
Run Code Online (Sandbox Code Playgroud)
列名是:
Time, Time Relative, N2, Time, Time Relative, H2, etc...
Run Code Online (Sandbox Code Playgroud)
所有时间和时间相对列包含相同的数据.我想要:
Time, Time Relative, N2, H2
Run Code Online (Sandbox Code Playgroud)
我所有的删除,删除等尝试,例如:
df=df.T.drop_duplicates().T
Run Code Online (Sandbox Code Playgroud)
导致唯一值索引错误:
Reindexing only valid with uniquely valued index objects
Run Code Online (Sandbox Code Playgroud)
很抱歉是熊猫菜鸟.任何建议,将不胜感激.
额外细节
Pandas版本:0.9.0
Python版本:2.7.3
Windows 7
(通过Pythonxy 2.7.3.0安装)
数据文件(注意:在真实文件中,列由制表符分隔,这里它们用4个空格分隔):
Time Time Relative [s] N2[%] Time Time Relative [s] H2[ppm]
2/12/2013 9:20:55 AM 6.177 9.99268e+001 2/12/2013 9:20:55 AM 6.177 3.216293e-005
2/12/2013 9:21:06 AM 17.689 9.99296e+001 2/12/2013 9:21:06 AM 17.689 3.841667e-005
2/12/2013 9:21:18 AM 29.186 9.992954e+001 2/12/2013 9:21:18 …
Run Code Online (Sandbox Code Playgroud) 要按单列过滤数据框(df),如果我们考虑男性和女性的数据,我们可能会:
males = df[df[Gender]=='Male']
Run Code Online (Sandbox Code Playgroud)
问题1 - 但如果数据跨越多年并且我只想看2014年的男性怎么办?
在其他语言中,我可能会这样做:
if A = "Male" and if B = "2014" then
Run Code Online (Sandbox Code Playgroud)
(除了我想这样做并在新的dataframe对象中获取原始数据帧的子集)
问题2.如何在循环中执行此操作,并为每个独特的年份和性别集创建数据框对象(即:2013年男性,2013年女性,2014年男性和2014年女性的df
for y in year:
for g in gender:
df = .....
Run Code Online (Sandbox Code Playgroud) 我想要元素方面的逻辑OR运算符.我知道"或"本身并不是我想要的.
我知道AND对应于&
和不对~
.但是OR怎么样?
python boolean-logic logical-operators boolean-operations pandas
例如,我想创建一个掩盖值为40到60之间的元素的掩码:
foo = np.asanyarray(range(100))
mask = (foo < 40).__or__(foo > 60)
Run Code Online (Sandbox Code Playgroud)
哪个看起来很难看,我写不出来:
(foo < 40) or (foo > 60)
Run Code Online (Sandbox Code Playgroud)
因为我最终得到:
ValueError Traceback (most recent call last)
...
----> 1 (foo < 40) or (foo > 60)
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)
是否有规范的方法在具有良好外观的代码的numpy数组上进行元素明智的布尔运算?
我有一个Pandas DF,我需要过滤掉一些包含值== 0的行,用于特征'a'和特征'b'.
为了检查值,我运行以下命令:
DF1 = DF[DF['a'] == 0]
Run Code Online (Sandbox Code Playgroud)
返回正确的值.同样,通过这样做:
DF2 = DF[DF['b'] == 0]
Run Code Online (Sandbox Code Playgroud)
我可以看到特征'b'的0值.
但是,如果我尝试使用OR操作数在单行代码中组合这些2:
DF3 = DF[DF['a'] == 0 | DF['b'] == 0]
Run Code Online (Sandbox Code Playgroud)
我明白了:
TypeError: cannot compare a dtyped [float64] array with a scalar of type [bool]
Run Code Online (Sandbox Code Playgroud)
这里发生了什么事?
pd.eval
并且eval
是pandas API套件中功能强大但被低估的功能,它们的使用远未完全记录或理解.小心适量,eval
并且engine
可以极大地简化代码,提高性能,并成为创建动态工作流的强大工具.
这个规范QnA的目的是让用户更好地理解这些功能,讨论一些鲜为人知的功能,如何使用它们,以及如何最好地使用它们,以及清晰易懂的示例.这篇文章将讨论的两个主要议题是
parser
,df2
并x
在争论pd.eval
,以及它们如何被用来计算表达式eval
,eval
并且engine
,当每个功能是合适的用于动态执行.这篇文章不能替代文档(答案中的链接),所以请完成它!
我将以这样的方式构建一个问题,以便开启对所支持的各种功能的讨论parser
.
给出两个DataFrame
np.random.seed(0)
df1 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))
df1
A B C D
0 5 0 3 3
1 7 9 3 5
2 2 4 7 6
3 8 8 1 6
4 7 7 8 1
df2
A B C …
Run Code Online (Sandbox Code Playgroud) 对于如下的df表,
A B C D
0 0 1 1 1
1 2 3 5 7
3 3 1 2 8
Run Code Online (Sandbox Code Playgroud)
为什么在布尔索引后选择特定列需要双括号?
the [['A','C']] part of
df[df['A'] < 3][['A','C']]
Run Code Online (Sandbox Code Playgroud)