Python:传递一个if语句来绘制在pandas中只包含float的列

时间:2017-05-05 19:36:08

标签: python pandas

我有一个像这样的pandas数据框:

   a        b           c          d          e         f         g        \

0 2.689023 2.574812 86.125377 11.092565 4.939444 2.851453 1.754082
1 2.072062 2.142972 107.184461 45.948551 2.181561 3.030148 1.347777
2 2.122226 2.282065 84.648076 5.524413 12.444351 3.265505 1.487924
3 2.134716 2.059546 87.338169 2.102929 6.992658 3.124260 1.569247
4 1.394049 1.588723 52.834432 3.743313 8.523079 2.710473 1.147418

   h         i          j          k          l         m           n      \

0 1.464062 63.088607 1.920668 85.786448 37.789046 23.080176 47.276513
1 1.026195 66.002393 1.297645 103.159307 19.147647 38.081938 91.625779
2 1.544903 63.542854 1.502209 90.655852 30.597791 33.488811 46.330959
3 1.464062 99.193164 1.910971 213.842295 36.663162 20.407577 46.259227
4 1.232436 61.228213 1.542646 71.922704 28.493704 8.649692 34.185022

  o          p       Time    Dose  

0 1.505346 0.786096 2小时5mg / kg
1 2.249856 0.536542 2小时5mg / kg
2 5.700618 0.307784 2小时5mg / kg
3 3.583611 0.058229 2小时5mg / kg
4 2.170392 0.411765 2小时5mg / kg

我要做的是在x轴上为所有测量变量绘制单独的图,并按剂量分组。像这样:

Basic_lineplot

我可以通过使用此命令将每个变量名称逐个作为y值传递来实现此目的:

sns.factorplot(x="Time", y="a", hue="Dose", data=df2, kind="point")

然而,由于这变得乏味,我希望编写一个for循环,它只绘制具有数值的列并排除列' Time'和'剂量'。我试图使用的代码是:

for i in df2:
    if df2.dtypes == float:
        lineplot = sns.factorplot(x="Time", y=i, hue="Dose", data=df2,
                   size=6, kind="point", capsize=.2, palette="dark", 
                   legend_out=False)

但是,我收到此错误:

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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为您正在尝试将系列与此特定行中的单个值进行比较:

if df2.dtypes == float:

尝试将其写为:

if df2[i].dtypes == float: