前提・実現したいこと
Pythonを使用して、あるNetCDFファイルをXarray.DataArrayで読み込み、さらにPandas.DataFrameに変換したところ、下記のMultiIndexのDataFrameとなりました。
precipitation
lat lon time
89.95 -179.95 2001-01-01 0.0
2001-01-02 0.0
2001-01-03 0.0
2001-01-04 0.0
2001-01-05 0.0
...
-89.95 179.95 2001-01-27 0.0
2001-01-28 0.0
2001-01-29 0.0
2001-01-30 0.0
2001-01-31 0.0
このDataFrameから'lat'インデックスが10.25から12.25まで、'lon'インデックスが105.45から109.25までの部分のみを切り出し、CSVファイルに出力したいです。
発生している問題・エラーメッセージ
TypeError: Cannot cast array data from dtype('float64') to dtype('<U32') according to the rule 'safe'
該当のソースコード
df = df.loc[pd.IndexSlice['{lat_end}':'{lat_start}', '{lon_start}':'{lon_end}', :], :]
Python
1import xarray as xr 2import pandas as pd 3 4# 開始年と終了年の設定 5year_start = 2001 6year_end = 2007 7 8# データ範囲の設定 9lat_start = 10.25 10lat_end = 12.25 11lon_start = 105.45 12lon_end = 109.25 13 14for year in range(year_start, year_end+1): 15 for month in range(1,13): 16 # netcdfファイルをxarray.DataArrayで読み込み 17 file = f'./Precipitation/MSWEP/mswep_SGDN_daily_nc/{year}{month:02}.nc' 18 nc = xr.open_dataset(file) 19 20 # xarray.DataArrayをPandas.DataFrameに変換 21 df = nc.to_dataframe() 22 23 # インデックス'lat'を昇順でソート 24 df = df.sort_index(level='lat') 25 26 # スライスで指定 27 df = df.loc[pd.IndexSlice['{lat_end}':'{lat_start}', '{lon_start}':'{lon_end}', :], :] 28 29 # csvファイルに出力 30 file = f'./Precipitation/MSWEP/mswep_SGDN_daily_csv/{year}{month:02}.csv' 31 df.to_csv(file)
試したこと
pd.locの代わりにpd.xsを使用したり、pd.IndexSliceの代わりにsliceを使用したりしましたが、同じエラーメッセージが発生しました。
補足情報(FW/ツールのバージョンなど)
Python 3.8.3
Pandas 1.0.5
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/05 09:44
2021/08/05 09:52
2021/08/05 09:57