相关疑难解决方法(0)

Pandas:查询字符串,其中列名包含特殊字符

我正在使用具有如下结构的数据框:

In[75]: df.head(2)
Out[75]: 
  statusdata             participant_id association  latency response  \
0   complete  CLIENT-TEST-1476362617727       seeya      715  dislike   
1   complete  CLIENT-TEST-1476362617727      welome      800     like   

   stimuli elementdata statusmetadata demo$gender  demo$question2  \
0  Sample B    semi_imp       complete        male              23   
1  Sample C    semi_imp       complete      female              23   
Run Code Online (Sandbox Code Playgroud)

我希望能够对column运行查询字符串demo$gender

df.query("demo$gender=='male'")
Run Code Online (Sandbox Code Playgroud)

但这有一个$标志问题。如果我$用另一个定界符(如-)替换符号,则问题仍然存在。我可以修复我的查询字符串以避免此问题。我不希望重命名这些列,因为这些列与应用程序的其他部分紧密对应。

我真的想坚持使用查询字符串,因为它是由我们技术堆栈的另一个组件提供的,而创建一个解析器对于看似简单的问题将是沉重的负担。

提前致谢。

python dataframe pandas

4
推荐指数
2
解决办法
9471
查看次数

系列的真值在数据框中不明确

我有相同的代码,我正在尝试使用简单的条件在 Pandas 数据框中创建新字段:

if df_reader['email1_b']=='NaN':
    df_reader['email1_fin']=df_reader['email1_a']
else:
    df_reader['email1_fin']=df_reader['email1_b']
Run Code Online (Sandbox Code Playgroud)

但我看到了这个奇怪的错误:

ValueError                                Traceback (most recent call last)
<ipython-input-92-46d604271768> in <module>()
----> 1 if df_reader['email1_b']=='NaN':
      2     df_reader['email1_fin']=df_reader['email1_a']
      3 else:
      4     df_reader['email1_fin']=df_reader['email1_b']

/home/user/GL-env_py-gcc4.8.5/lib/python2.7/site-packages/pandas/core/generic.pyc in __nonzero__(self)
    953         raise ValueError("The truth value of a {0} is ambiguous. "
    954                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 955                          .format(self.__class__.__name__))
    956 
    957     __bool__ = __nonzero__

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)

任何人都可以解释我,我需要什么?

python python-2.7 pandas

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

通过特定列的可能前缀列表过滤数据框

我想要做的是:

options = ['abc', 'def']
df[any(df['a'].str.startswith(start) for start in options)]
Run Code Online (Sandbox Code Playgroud)

我想应用一个过滤器,所以我只有在列 'a' 中具有以给定选项之一开头的值的条目。

下一个代码有效,但我需要它与几个前缀选项一起使用...

start = 'abc'
df[df['a'].str.startswith(start)]
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()但不了解如何使用。

python python-3.x pandas

4
推荐指数
1
解决办法
2219
查看次数

用python计算股票的平衡交易量(OBV)

我正在用 python 做我的第一个项目。我有一个名为 df 的 pandas 数据框,有两列“close”和“volume”。我想根据前两列计算/获取 OBV 列。公式如下;

如果收盘价高于前一收盘价,则: 当前 OBC = 前一个 OBC + 当前成交量

如果收盘价低于前收盘价,则: 当前 OBV = 前 OBV - 当前成交量

如果收盘价等于前收盘价,则:当前 OBV = 前 OBV(无变化)

close volume  OBC
30    2500    nan
32    3000    5500
25    2700    2800
35    4000    6800
20    1000    5800
Run Code Online (Sandbox Code Playgroud)

我正在使用这段代码:

for i in df.close[1:]:
    if i > df.close.shift(-1):
        df["OBC"] = df.volume + df.OBC.shift(-1) 
    elif i < df.close.shift(-1):
        df["OBC"] = df.OBC.shift(-1) - df.volume
    else:
        df["OBC"] = df.OBC
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。 …

python pandas

4
推荐指数
2
解决办法
7953
查看次数

ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。df[条件]

如果“embark_town”列中的数据是“南安普敦”,我想将它们全部更改为“曼彻斯特”。因此,在通过条件设置访问数据后,我应用了“应用”功能。有什么问题?

# Import Packages
import pandas as pd 
import numpy as np
import seaborn as sns

# dataset upload
df = sns.load_dataset("titanic")
df = df.rename(columns={'pclass':'passenger_class','sex':'gender','age':'old'})

def change(name):
  if name == 'Southampton':
    name = 'Manchester'
  return name

condition = (df.embark_town == 'Southampton')

df[condition] = df[condition].apply(change)
df

Run Code Online (Sandbox Code Playgroud)

得到一个错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-2cf6d75dce9e> in <module>()
     14 
     15 condition = (df.embark_town == 'Southampton')
---> 16 df[condition] = df[condition].apply(change)
     17 df
     18 # df['embark_town'] = df['embark_town'].apply(change)

5 frames
/usr/local/lib/python3.7/dist-packages/pandas/core/generic.py in __nonzero__(self) …
Run Code Online (Sandbox Code Playgroud)

python pandas

4
推荐指数
1
解决办法
7万
查看次数

在两列上创建条件并创建第三列失败的Pandas Python

我有以下数据,并且我想在某些条件下创建一个新列。请参见以下内容:
数据集:

real,rel
1,0
0,1
1,1
0,1
0,0
0,0
1,1
1,1
0,0
0,1
1,0
1,1
0,1
1,0
Run Code Online (Sandbox Code Playgroud)

我尝试的代码和收到的错误:

>>> import pandas as pd
>>> df = pd.read_csv("test.csv")
>>> df.loc[df["real"]==0 and df["rel"]==0,"out"] = 9
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python35\lib\site-packages\pandas\core\generic.py", line 1576, in __nonzero__
    .format(self.__class__.__name__))
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)

我对条件out列:
real0rel0out …

python python-3.x pandas

3
推荐指数
1
解决办法
78
查看次数

使用if-else创建新列时的Pandas错误:Series的真值是不明确的

我正在使用Pandas并尝试使用Python if-else语句(也称为三元条件运算符)创建一个新列,以避免被零除.

例如下面,我想通过划分A/B来创建一个新的列C. 我想使用if-else语句来避免除以0.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0, 5, size=(100, 2)), columns=list('AB'))
df.head()
#    A  B
# 0  1  3
# 1  1  2
# 2  0  0
# 3  2  1
# 4  4  2

df['C'] = (df.A / df.B) if df.B > 0.0 else 0.0
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)

我在StackOverflow上搜索并发现了有关此错误的其他帖子,但它们都没有涉及这种类型的if-else语句.一些帖子包括:

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

系列的真值在数据帧中是模糊的

错误:系列的真值是不明确的 - Python pandas

任何帮助,将不胜感激.

python pandas

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

ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all():返回空值列

我正在处理信用风险分析项目的缺失数据。Dataframe 的许多列中都存在缺失值。 数据框贷款数据如下:

[IN]: loan_data
[OUT]:

Emp_ID   Emp_Name    City_Name     Salary      Designation  Emp_years Age
  1        A           Delhi       30,00,000      GM          15       45
  2        B           Mumbai       NAN        Clerk          2        22
  3        c           NAN          NAN         Peon          4        18
  4        D           Chennai      7,000       NAN           5        20
  5        E           NAN          NAN          NAN          4        50
Run Code Online (Sandbox Code Playgroud)

等等....

现在我想要显示的唯一列应该是那些我有 NAN 值的列,我想要它们的总和(有多少行有 NAN 值

例如,

[IN]: 
def return_loan_data_missing(x):
if (x.isnull().sum()>0):
    return x.isnull().sum()

return_loan_data_missing(loan_data)

[OUT]:
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)

python pandas

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

pandas dataframe 将列与常量进行比较

我有一个类似的代码:

df = pd.DataFrame([{'a': 1, 'b': 2}])
df['c'] = min(5, df['a'] + df['b'])
Run Code Online (Sandbox Code Playgroud)

我的目标是添加列“c”作为常数以及列“a”和“b”之和的最小值。但是Python在第二行给出了错误消息,例如:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

这个消息是什么意思?我怎样才能实现我的目标?

python dataframe pandas

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

标签 统计

pandas ×9

python ×9

dataframe ×2

python-3.x ×2

python-2.7 ×1