如何根据pandas中某些列中的值从DataFrame中选择行?
在SQL中我会使用:
SELECT *
FROM table
WHERE colume_name = some_value
Run Code Online (Sandbox Code Playgroud)
我试着看看熊猫文档,但没有立即找到答案.
这是我的代码:
def front_back(a, b):
# +++your code here+++
if len(a) % 2 == 0 && len(b) % 2 == 0:
return a[:(len(a)/2)] + b[:(len(b)/2)] + a[(len(a)/2):] + b[(len(b)/2):]
else:
#todo! Not yet done. :P
return
Run Code Online (Sandbox Code Playgroud)
我在IF条件中遇到错误.我究竟做错了什么?
我刚刚在代码中发现了一个逻辑错误,导致了各种各样的问题.我无意中做了一个按位AND而不是逻辑AND.
我更改了代码:
r = mlab.csv2rec(datafile, delimiter=',', names=COL_HEADERS)
mask = ((r["dt"] >= startdate) & (r["dt"] <= enddate))
selected = r[mask]
Run Code Online (Sandbox Code Playgroud)
至:
r = mlab.csv2rec(datafile, delimiter=',', names=COL_HEADERS)
mask = ((r["dt"] >= startdate) and (r["dt"] <= enddate))
selected = r[mask]
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,我收到了相当神秘的错误消息:
ValueError:具有多个元素的数组的真值是不明确的.使用a.any()或a.all()
为什么在使用按位操作时没有发出类似的错误 - 我该如何解决这个问题?
我在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) 我想要如果条件成立,df[df["tg"] > 10然后df[df["tg"] < 32乘以五,否则除以二。但是,我收到以下错误
ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
d = {'year': [2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001],
'day': [1, 2, 3, 4, 1, 2, 3, 4,],
'month': [1, 1, 1, 1, 2, 2, 2, 2],
'tg': [10, 11, 12, 13, 50, 21, -1, 23],
'rain': [1, 2, 3, 2, 4, 1, 2, 1]}
df = pd.DataFrame(data=d)
print(df)
[OUT]
year day month tg rain
0 2001 1 1 10 1
1 2001 2 …Run Code Online (Sandbox Code Playgroud) 刚刚进入 Python,所以希望我不会在这里问一个愚蠢的问题......
所以我有一个名为“df_complete”的 Pandas 数据框,假设有 100 行,包含名为:“type”、“writer”、“status”、“col a”、“col c”的列。我想创建/更新一个名为“temp_df”的新数据框,并根据使用“df_complete”值的条件创建它。
temp_df = pandas.DataFrame()
if ((df_complete['type'] == 'NDD') & (df_complete['writer'] == 'Mary') & (df_complete['status'] != '7')):
temp_df['col A'] = df_complete['col a']
temp_df['col B'] = 'good'
temp_df['col C'] = df_complete['col c']
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我收到以下错误消息:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Run Code Online (Sandbox Code Playgroud)
我阅读了这个线程并将我的“和”更改为“&”: 系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
我还在这里阅读了此线程以将所有内容放在括号中:将 dtyped [float64] 数组与 Pandas DataFrame 中类型为 [bool] 的标量进行比较
但是错误仍然存在。这是什么原因造成的?我该如何解决?
** 后续问题 ** 另外,如何获取满足条件的行的索引值?
我知道之前已经问过这个问题,但是,当我试图做一个if声明并且我收到错误时.我查看了这个链接,但在我的情况下没有多大帮助.我dfs是一个DataFrame列表.
我正在尝试以下方式,
for i in dfs:
if (i['var1'] < 3.000):
print(i)
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
ValueError:Series的真值是不明确的.使用a.empty,a.bool(),a.item(),a.any()或a.all().
和我尝试以下,并得到同样的错误.
for i,j in enumerate(dfs):
if (j['var1'] < 3.000):
print(i)
Run Code Online (Sandbox Code Playgroud)
我的var1数据类型是float32.我没有使用任何其他logical运营商和&或|.在上面的链接中,似乎是因为使用了逻辑运算符.我为什么要这样ValueError?
import random
import pandas as pd
heart_rate = [random.randrange(45,125) for _ in range(500)]
blood_pressure_systolic = [random.randrange(140,230) for _ in range(500)]
blood_pressure_dyastolic = [random.randrange(90,140) for _ in range(500)]
temperature = [random.randrange(34,42) for _ in range(500)]
respiratory_rate = [random.randrange(8,35) for _ in range(500)]
pulse_oximetry = [random.randrange(95,100) for _ in range(500)]
vitalsign = {'heart rate' : heart_rate,
'systolic blood pressure' : blood_pressure_systolic,
'dyastolic blood pressure' : blood_pressure_dyastolic,
'temperature' : temperature,
'respiratory rate' : respiratory_rate,
'pulse oximetry' : pulse_oximetry}
df = pd.DataFrame(vitalsign)
df.to_csv('vitalsign.csv')
mask …Run Code Online (Sandbox Code Playgroud) 我正在尝试在数据帧上应用if条件,但我遗漏了一些东西(错误:系列的真值是不明确的.使用a.empty,a.bool(),a.item(),a. any()或a.all().)
raw_data = {'age1': [23,45,21],'age2': [10,20,50]}
df = pd.DataFrame(raw_data, columns = ['age1','age2'])
def my_fun (var1,var2,var3):
if (df[var1]-df[var2])>0 :
df[var3]=df[var1]-df[var2]
else:
df[var3]=0
print(df[var3])
my_fun('age1','age2','diff')
Run Code Online (Sandbox Code Playgroud) 编写一个函数,该函数应满足行基础上的条件并返回预期结果
def bt_quantity(df):
df = bt_level(df)
df['Marker_change'] = df['Marker'] - df['Marker'].shift(1).fillna(0).round(0).astype(int)
df['Action'] = np.where(df['Marker_change'] > 0, "BUY", "")
def turtle_split(row):
if df['Action'] == 'Buy':
return baseQ * (turtle ** row['Marker'] - 1) // (turtle - 1)
else:
return 0
df['Traded_q'] = df.apply(turtle_split, axis=1).round(0).astype(int)
df['Net_q'] = df['Traded_q'].cumsum().round(0).astype(int)
print(df.head(39))
return df
Run Code Online (Sandbox Code Playgroud)
这是一个常见问题,我没有在代码中使用任何“和”或“或”。仍然收到以下错误
我尝试将 str 更改为 int(BUY >> 1),但没有进展。PS 数据集很大,我正在使用多个模块和函数来处理这个项目。
python ×10
pandas ×7
dataframe ×5
if-statement ×2
and-operator ×1
boolean ×1
filtering ×1
keyword ×1
logic ×1
numpy ×1