嗨,我遇到了以下代码
numdigits = len(cardNumber)
oddeven = numdigits & 1
Run Code Online (Sandbox Code Playgroud)
到底发生了什么?我不确定"&"是做什么的.
以下标准给出了布尔真假结果(梳子是一个超过1,000列的数据帧,我选择的列数超过4000.
criteria = comb.ix[:,'c_0327':].count()>4000
Run Code Online (Sandbox Code Playgroud)
我想用它来选择True列到新的Dataframe.
以下只给出了"Unalignable boolean Series key"
comb.loc[criteria,]
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
comb.ix[:, comb.ix[:,'c_0327':].count()>4000]
Run Code Online (Sandbox Code Playgroud)
类似于这个问题回答数据框布尔选择沿列而不是行, 但这给了我同样的错误:"提供了不可对齐的布尔系列键"
comb.ix[:,'c_0327':].count()>4000
Run Code Online (Sandbox Code Playgroud)
收益率:
c_0327 False
c_0328 False
c_0329 False
c_0330 False
c_0331 False
c_0332 False
c_0333 False
c_0334 False
c_0335 False
c_0336 False
c_0337 True
c_0338 False
.....
Run Code Online (Sandbox Code Playgroud) 在pandas DataFrame中,我有一系列的布尔值。为了过滤到布尔值为True的行,我可以使用:df[df.column_x]
我认为,为了只过滤列为False的行,我可以使用:df[~df.column_x]。我觉得我以前做过,并且已经将其视为接受的答案。
但是,这失败了,因为~df.column_x将值转换为整数。见下文。
import pandas as pd . # version 0.24.2
a = pd.Series(['a', 'a', 'a', 'a', 'b', 'a', 'b', 'b', 'b', 'b'])
b = pd.Series([True, True, True, True, True, False, False, False, False, False], dtype=bool)
c = pd.DataFrame(data=[a, b]).T
c.columns = ['Classification', 'Boolean']```
print(~c.Boolean)
0 -2
1 -2
2 -2
3 -2
4 -2
5 -1
6 -1
7 -1
8 -1
9 -1
Name: Boolean, dtype: object
print(~b)
0 False
1 False …Run Code Online (Sandbox Code Playgroud) import pandas as pd
import numpy as np
data = 'filename.csv'
df = pd.DataFrame(data)
df
one two three four five
a 0.469112 -0.282863 -1.509059 bar True
b 0.932424 1.224234 7.823421 bar False
c -1.135632 1.212112 -0.173215 bar False
d 0.232424 2.342112 0.982342 unbar True
e 0.119209 -1.044236 -0.861849 bar True
f -2.104569 -0.494929 1.071804 bar False
Run Code Online (Sandbox Code Playgroud)
我想为某列选择一个范围,让我们说列two.我想选择介于-0.5和+0.5之间的所有值.怎么做到这一点?
我期待用
-0.5 < df["two"] < 0.5
Run Code Online (Sandbox Code Playgroud)
但这(自然)给出了一个ValueError:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() …Run Code Online (Sandbox Code Playgroud) 我正在学习熊猫,并在这里遇到这个问题.
我创建了一个跟踪所有用户的数据框以及他们执行某些操作的次数.
为了更好地理解我创建此示例的问题:
import pandas as pd
data = [
{'username': 'me', 'bought_apples': 2, 'bought_pears': 0},
{'username': 'you', 'bought_apples': 1, 'bought_pears': 1}
]
df = pd.DataFrame(data)
df['bought_something'] = df['bought_apples'] > 0 or df['bought_pears'] > 0
Run Code Online (Sandbox Code Playgroud)
在最后一行中,我想添加一个列,指示用户是否已经购买了一些东西.
弹出此错误:
ValueError:Series的真值是不明确的.使用a.empty,a.bool(),a.item(),a.any()或a.all().
我理解熊猫系列中的歧义点(这里也有解释),但我无法将其与问题联系起来.
有趣的是这有效
df['bought_something'] = df['bought_apples'] > 0
Run Code Online (Sandbox Code Playgroud)
谁能帮我?
我想切片pandas.DataFrame满足条件A 或条件B的切片.大多数搜索结果仅显示如何使用"和"切片数据帧.所以我想知道是否可以使用"或"运算符而不将(A和B)转换为(不是(不是A而不是B))?因为有时需要许多"或"条件,转换可能会很麻烦.
我试着用:
df[(df['c1']==x1) or (df['c2']==x2)]
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我刚刚注意到了这一点:
df[df.condition1 & df.condition2]
df[(df.condition1) & (df.condition2)]
Run Code Online (Sandbox Code Playgroud)
为什么这两行的输出不同?
我无法分享确切的数据,但我会尝试尽可能多地提供详细信息:
df[df.col1 == False & df.col2.isnull()] # returns 33 rows and the rule `df.col2.isnull()` is not in effect
df[(df.col1 == False) & (df.col2.isnull())] # returns 29 rows and both conditions are applied correctly
Run Code Online (Sandbox Code Playgroud)
感谢@jezrael和@ayhan,这里发生了什么,让我使用@jezael提供的示例:
df = pd.DataFrame({'col1':[True, False, False, False],
'col2':[4, np.nan, np.nan, 1]})
print (df)
col1 col2
0 True 4.0
1 False NaN
2 False NaN
3 False 1.0
Run Code Online (Sandbox Code Playgroud)
如果我们看看第3行:
col1 col2
3 False 1.0
Run Code Online (Sandbox Code Playgroud)
以及我写条件的方式:
df.col1 == False & df.col2.isnull() …Run Code Online (Sandbox Code Playgroud) 我有一个包含 11 列的数据框,我想根据其中两列中的值创建一个新的 0,1 列。
我已经尝试使用 np.where 创建其他列,但它不适用于这一列。
train["location"] = np.where(3750901.5068 <= train["x"] <= 3770901.5068
and -19268905.6133 <= train['y'] <= -19208905.6133, 1, 0)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
我正在尝试根据两列的值对 Pandas 数据框进行子集化。我试过这个代码:
df[df['gold']>0, df['silver']>0, df['bronze']>0]但这没有用。
我也试过:
df[(df['gold']>0 and df['silver']>0)。这也不起作用。我收到一条错误消息:
ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
你有什么建议?
我有一个数据帧.
数据帧:
Symbol1 BB Symbol2 CC
0 ABC 1 ABC 1
1 PQR 1 PQR 1
2 CPC 2 CPC 0
3 CPC 2 CPC 1
4 CPC 2 CPC 2
Run Code Online (Sandbox Code Playgroud)
我想比较Symbol1与Symbol2和BB使用CC,如果他们是相同的话,我想那行唯一的其他行必须从数据帧中删除.
预期结果 :
Symbol1 BB Symbol2 CC
0 ABC 1 ABC 1
1 PQR 1 PQR 1
2 CPC 2 CPC 2
Run Code Online (Sandbox Code Playgroud)
如果比较两行,那么我正在使用:
df = df[df['BB'] == '2'].copy()
Run Code Online (Sandbox Code Playgroud)
它会工作正常.
df = df[df['BB'] == df['offset'] and df['Symbol1'] == df['Symbol2']].copy()
Run Code Online (Sandbox Code Playgroud)
它给了我错误.
错误:
ValueError: …Run Code Online (Sandbox Code Playgroud) 我有一些代码在 cron(通过 kubernetes)上运行了几个月。
昨天,我的部分代码无法正常工作:
突然间,这个声明不再是“True”(df_temp 和 df_temp4 中都有数据:
if ( len(df_temp > 0) & len(df_temp4 > 0)):
print "HERE"
Run Code Online (Sandbox Code Playgroud)
然而,这有效:
if ( len(df_temp > 0) and len(df_temp4 > 0)):
print "HERE"
Run Code Online (Sandbox Code Playgroud)
是否存在某种代码推送会导致此更改?由于我已经运行这段代码几个月了,不确定什么会导致该语句突然失败。
我有一个简单的pandas数据框.
import pandas as pd
x = [5, 10, 20, 30, 5, 10, 20, 30, 5, 10, 20, 30]
y = [100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 600, 600]
users =['mark', 'mark', 'mark', 'rachel', 'rachel', 'rachel', 'jeff', 'jeff', 'jeff', 'lauren', 'lauren', 'lauren']
df = pd.DataFrame(dict(x=x, y=y, users=users)
Run Code Online (Sandbox Code Playgroud)
我想保留数据帧的某些行.让我们说所有"rachels"和"jeffs".我试过了df.query:
df=df.query('users=="rachel"' or 'users=="jeff"')
Run Code Online (Sandbox Code Playgroud)
结果是只有一个数据框users=="rachel".有没有办法结合查询?
我有这样的数据帧,
ID F/P FTE Actual FTE Calculated
1 F 100 100
2 F 110 110
3 P 90 100
4 P 90 90
Run Code Online (Sandbox Code Playgroud)
我想生成结果列
如果FTE Actual不等于FTE Calculated,则结果为FALSE,我们不再检查.
如果为真,那么我们查看F/P列,如果F/P列的值为F,则FTE_Calculated应该等于100.
如果为真,则我们查看F/P列,如果F/P列的值为P,则FTE_Calculated应小于100.
ID F/P FTE Actual FTE Calculated Expected Result
1 F 100 100 True
2 F 110 110 False (as it is more than 100)
3 P 90 100 False
4 P 90 90 True
Run Code Online (Sandbox Code Playgroud)