ValueError: 制作风玫瑰时无法将 float NaN 转换为整数

问题描述 投票:0回答:0

我写了一个代码来为加利福尼亚州的一个县创建月度污染风玫瑰。污染玫瑰与风玫瑰类似,它们显示风向的分布,但它们不显示风速的大小,而是绘制 PM2.5 的浓度。我已经将此代码用于加州空气资源委员会的许多数据集,但现在我正在使用来自本地监控网络的数据,并在运行我的代码时收到以下错误消息:

ValueError: cannot convert float NaN to integer

这是我的 csv 文件的链接

这是我的代码:

import pandas as pd
from windrose import WindroseAxes
import matplotlib.pyplot as plt
import matplotlib.cm as cm

wr = pd.read_csv('IVANCALEX_forSO.csv')
wr = wr.set_index('date')
wr.index = pd.to_datetime(wr.index)

wr["Month"] = wr.index.month
wr['Hour'] = wr.index.hour

month_dict = {1: "January", 2: "February", 3: "March", 4: "April",
               5: "May", 6: "June", 7: "July", 8: "August", 9: "September",
               10: "October", 11: "November", 12: "December"}

xval = ["dir_3135"]
yval = ['Calexico, 604 Kubler Rd', 'Calexico, Alvarez', 'Calexico, Encinas Ave and Ethel St', 'Calexico, Ethel',
       'Calexico, Housing Authority', 'Calexico, Housing Authority West', 'Calexico, Residence', 
       'Holtville, 1015 Miller Rd', 'Holtville, South', '1201 West Hwy 98']

months = [v for k,v in month_dict.items()]
nrows, ncols = 2,6

#bins=np.logspace(0, 4, num=5) #pm10
#bins=np.arange(0, 1, .2) #pm2.5/pm10

for x,y in zip(xval,yval):
    fig = plt.figure(figsize=(15, 10))
    plt.subplots_adjust(hspace=0.5)
    site_name = y.split(",")[0].replace(" ", "_")
    fname = f"pollutionrose_{site_name}.png"
    bins=[-60,-10,0,10,40] #ozone deviations
    fig.tight_layout()
    for i, month in enumerate(months):
        d =  wr[wr["Month"].eq(month)].reset_index(drop=True)
        ax = fig.add_subplot(nrows, ncols, i + 1, projection="windrose")
        ax.set_title(month.capitalize(),fontsize=20, weight='bold')
        ax.bar(d[x], d[y],
           normed=True, opening=0.8,
           bins=bins, cmap=cm.rainbow,
           nsector=8)
        ax.set_xticklabels(['E', 'N-E', 'N', 'N-W', 'W', 'S-W', 'S', 'S-E'],fontsize=18)
        ax.tick_params(axis="y", labelsize=12.5)
        #ax.set_legend(decimal_places=1,fontsize='x-large', loc='best')
        #ax.set_yticklabels(np.arange(11, 77, step=11), fontsize=18)
    ax.figure.savefig(fname, dpi=400) #(8, 56, step=8)

我不确定为什么会收到此错误消息,因为我过去处理过具有许多 NaN 值的数据并且没有问题。是否有太多 NaN 值无法执行此分析?

我试着做了这个修改:

for i, month in enumerate(months):
    d =  wr[wr["Month"].eq(month)].reset_index(drop=True)
    ax = fig.add_subplot(nrows, ncols, i + 1, projection="windrose")
    ax.set_title(month.capitalize(),fontsize=20, weight='bold')

    # Drop rows with NaN values in d[x] or d[y]
    if d[x].isna().any() or d[y].isna().any():
        d = d.dropna(subset=[x, y])
    
    ax.bar(d[x], d[y],
           normed=True, opening=0.8,
           bins=bins, cmap=cm.rainbow,
           nsector=8)
    ax.set_xticklabels(['E', 'N-E', 'N', 'N-W', 'W', 'S-W', 'S', 'S-E'],fontsize=18)
    ax.tick_params(axis="y", labelsize=12.5)

但似乎并没有解决问题。最终我希望它看起来像所附的图片。

python pandas nan windrose
© www.soinside.com 2019 - 2024. All rights reserved.