使用 if else 在 Jupyter 中创建海运图时出错

Posted

技术标签:

【中文标题】使用 if else 在 Jupyter 中创建海运图时出错【英文标题】:error in creating seaborne graph in Jupyter by using if else 【发布时间】:2020-12-13 00:04:13 【问题描述】:

我尝试使用 seaborn 为 python 中的日期列创建图表。我收到以下错误。你知道如何解决它吗?

----> 4 如果 df['MS_Date']=="s.xii" 或 df['MS_Date']=="s.xii(1)" 或 df['MS_Date']==" s.xii(2)" 或 df['MS_Date']=="s.xii(in)" 或 df['MS_Date']=="s.xii(ex)" 或 df['MS_Date']== “s.xii(医学)”: 5 df['MS_Date']== "12 世纪" 6 如果 df['MS_Date']=="s.xii/xiii" 或 df['MS_Date']=="s.xii/xiii":

~\anaconda\lib\site-packages\pandas\core\generic.py in nonzero(self) 1477 第1478章 -> 1479 axis 和另一个轴的标签。 1480 1481参数

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

代码:

if df['MS_Date']=="s.xii" or df['MS_Date']=="s.xii(1)" or df['MS_Date']=="s.xii(2)" or df['MS_Date']=="s.xii(in)" or df['MS_Date']=="s.xii(ex)" or df['MS_Date']=="s.xii(med)": 
        df['MS_Date']== "12th century"
if df['MS_Date']=="s.xii/xiii" or df['MS_Date']=="s.xii/xiii":
    df['MS_Date']=="12 & 13 century"
if df['MS_Date']=="s.xiii" or df['MS_Date']=="s.xiii(1)" or df['MS_Date']=="s.xiii(2)" or df['MS_Date']=="s.xiii(in)" or df['MS_Date']=="s.xiii(ex)" or df['MS_Date']=="s.xiii(med)":
    df['MS_Date']=="13 century"
if df['MS_Date']=="s.xiii/s.xiv" or df['MS_Date']=="s.xiii/xiv":
    df['MS_Date']=="13 & 14 century"
if df['MS_Date']=="s.xiii/s.xv":
    df['MS_Date']=="13 & 15 century"
if  df['MS_Date']=="s.xiv" or df['MS_Date']=="s.xiv(1)" or df['MS_Date']=="s.xiv(2)" or df['MS_Date']=="s.xiv(in)" or df['MS_Date']=="s.xiv(ex)"  or df['MS_Date']=="s.xiv(med)": 
    df['MS_Date']=="14th century"
if  df['MS_Date']=="s.xiv/xv":
    df['MS_Date']== "14 & 15 century"
if df['MS_Date']=="s.xv" or df['MS_Date']=="s.xv(1)" or df['MS_Date']=="s.xv(2)" or df['MS_Date']=="s.xv(in)" or df['MS_Date']=="s.xv(ex)" or df['MS_Date']=="s.xv(med)" :
    df['MS_Date']=="15th century"
if  df['MS_Date']=="s.xv/xvi":
    df['MS_Date']== "15 & 16 century"
if df['MS_Date']=="xvi" or df['MS_Date']=="s.xvi(in)":
    df['MS_Date']== "16 century"
else:
    df['MS_Date']=="unknown"



import seaborn as sns
sns.set(style="whitegrid")
fig, ax = plt.subplots()
fig.set_size_inches(25, 12)
sns.countplot(x='MS_Date', data=df, order=df['MS_Date'].value_counts().index, palette="Greens_d")
sns.set(style="white")
dfnew=nbl.describe(include=['object'])
num=dfnew.loc['count','MS_Date']
# df.iloc[0]['MS_Date']
ax.set_title('Distrubution of all manuscripts '+str(num)+' manuscripts')

【问题讨论】:

最好使用np.select 方法。您将更容易跟踪要分配的条件和值。 【参考方案1】:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

此错误意味着您正在获取一系列布尔值而不是单个布尔值。要使用 if 和 alse,您需要单个 True/False 值,但在这里使用 df['MS_Date']=="s.xii" 您将获得一个系列,它将根据它们满足的条件为您提供具有 True/False 的所有位置。

样本df:

    Player      Position    color
0   Pele        Forward     black
1   Platini     Midfielder  white
2   Beckenbauer Defender    red

如果我想根据某些条件更改颜色列的值,那么不要使用 if 和 else,我会这样写:

df.loc[(df['Player']=='Pele') | (df['Position']=='Forward'), 'color'] = 'white'

或者

你可以用numpy.where这样写:

np.where(<condition>, <value1 if true>, <value2 if false>) 

df['color'] = np.where((df['Player']=='Pele') | (df['Position']=='Forward'), 'black', df.color)

要使其简洁明了,请使用np.select,请参见此处如何使用: https://***.com/a/60244752/6660373

你也可以使用eq而不是==

我将使用 loc 来获取我的条件成立的位置。在那个位置上,我将选择一个要更改的列。 df.loc[&lt;conditions&gt;, &lt;column to assign&gt;] = &lt;value&gt;

这样使用:

df.loc[(df['MS_Date']=="s.xii") | (df['MS_Date']=="s.xii(1)") | (df['MS_Date']=="s.xii(2)") | (df['MS_Date']=="s.xii(in)") | (df['MS_Date']=="s.xii(ex)") | (df['MS_Date']=="s.xii(med)"), 'MS_Date']= "12th century"
df.loc[(df['MS_Date']=="s.xii/xiii") | (df['MS_Date']=="s.xii/xiii"), 'MS_Date']="12 & 13 century"

【讨论】:

是的!它真的很有帮助!我只是想弄清楚如何排序 @Pygirl 你知道怎么排序吗? 12日、13日、14日等? sns.countplot(x='MS_Date', data=df, order=df['MS_Date'].value_counts().index, palette="Greens_d") 你必须创建一个 custom.sort 函数。

以上是关于使用 if else 在 Jupyter 中创建海运图时出错的主要内容,如果未能解决你的问题,请参考以下文章

在视图 yii2 中创建 if else 语句

在 Java 中创建不依赖 if-else 的工厂方法

如何在 oracle sql 脚本中创建 if-then-else 语句?

中美问题的本质是“操作系统”之争|贺建海

如何在 scala 中创建未初始化的 Dataframe 变量。因此可以在 if else 条件下初始化相同的变量

决策树决策树与Jupyter小部件的交互式可视化