2017-02-03 13 views
1

私は私が読んCSVでデータセットがあります。以下のデータフレームは、[0..8759]次の形式であるPython Pandas - データフレームに複数のインデックスがありますか?

df = pd.read_csv(requestfile, header=[0,1], parse_dates= [0]) 

    time output direct diffuse temperature 
       UTC  kW kW/m2 kW/m2  deg C 
0 2014-01-01 00:00:00 0.000 0.000 0.000  1.495 
1 2014-01-01 01:00:00 0.000 0.000 0.000  1.543 
2 2014-01-01 02:00:00 0.000 0.000 0.000  1.517 

は今、私はhttps://github.com/renewables-ninja/gseeを使用して物事を行う必要が(gsee.pv.run_plant_model)は、しかし、私は次のエラーが表示されます

File "C:\Data\Solar\gsee-master\gsee\trigon.py", line 183, in aperture_irradiance 
sunrise_set_times = sun_rise_set_times(direct.index, coords) 

File "C:\Data\Solar\gsee-master\gsee\trigon.py", line 56, in sun_rise_set_times 
dtindex = pd.DatetimeIndex(datetime_index.to_series().map(pd.Timestamp.date).unique()) 

File "C:\Users\XX\Anaconda3\lib\site-packages\pandas\core\series.py", line 2177, in map 
new_values = map_f(values, arg) 

File "pandas\src\inference.pyx", line 1207, in pandas.lib.map_infer (pandas\lib.c:66124) 
TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'int' 

は、だから私は、障害が私のデフォルトの指標であると仮定ので、私は目を修正しました電子CSV-読ん指標として「時間」列を使用する:

df = pd.read_csv(requestfile, header=[0,1], index_col=0, parse_dates= [0]) 

time    output direct diffuse temperature 
UTC      kW kW/m2 kW/m2  deg C 
2014-01-01 00:00:00 0.000 0.000 0.000  1.495 
2014-01-01 01:00:00 0.000 0.000 0.000  1.543 

は、今私が得るエラーは以下の通りである:私が正しく理解している場合、私の指標であるため

File "C:\Users\XX\Anaconda3\lib\site-packages\pandas\core\frame.py", line 402, in _init_dict 
return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype) 

File "C:\Users\XX\Anaconda3\lib\site-packages\pandas\core\frame.py", line 5398, in _arrays_to_mgr 
index = extract_index(arrays) 

File "C:\Users\XX\Anaconda3\lib\site-packages\pandas\core\frame.py", line 5437, in extract_index 
raise ValueError('If using all scalar values, you must pass' 

ValueError: If using all scalar values, you must pass an index 

だから、最初のエラーがあります数字だけでは、[0..8759] INTでは、日時・形式にする必要があるとき、そして私のインデックスは、日時・フォーマットで、

index = extract_index(arrays) 

はorginalインデックス[0を持っていないので、私の2番目のエラーです。 .8759]。または私はスカラー値のエラーが間違っていると完全に理解していますか? DataFrameに2つのインデックス、1つの[0..8759]と他の['時間']列を持つことは可能でしょうか?これはどうやってpd.read_csv関数に変換されるのでしょうか?

それは任意のヘルプであれば、私も(私はデータフレームDFを呼び出したときに、いくつかの初心者のミスのために表示されません)DATAFRAMEで次のようにします(しかし、彼らはrun_plant_model機能とで使用されている):

df.global_horizontal = df.direct + df.diffuse 
df.diffuse_fraction = df.diffuse/df.global_horizontal 
df.diffuse_fraction = df.diffuse_fraction.fillna(0) 

EDIT:データフレームに最新の列を正しく追加しました。エラーには何の影響もありませんでした。

ファンクションコール:

gsee.pv.run_plant_model(df, site.coords, angle, azimuth, tracking, 
         capacity, technology, system_loss, 
         angles=None, include_raw_data=False)  

私は元の質問が悪いだったかもしれないと信じて:

C:\Users\XX\Anaconda3\lib\site-packages\pandas\indexes\base.py:2683: RuntimeWarning: Cannot compare type 'Timestamp' with type 'str', sort order is undefined for incomparable objects 
return this.join(other, how=how, return_indexers=return_indexers) 

だから私は持っている 'STR' 私は 'タイムスタンプ' を持つべきどこ?

+0

エラーを投げている関数に呼び出しを追加できますか? – ASGM

答えて

0

[OK]を、私はエラーを発見し、元の質問が悪かった:

ソリューション:

df = pd.read_csv(requestfile, index_col=[0], parse_dates=[0], skiprows=[1]) 

ヘッダが出て残っていた、と私は「STR」で単位を含む行をスキップするread_csvを追加しました。だから問題は、使用された関数の1つが 'タイムスタンプ'と単位行( 'str')を比較しようとしていたことでした。