2016-11-03 14 views
1

時間と分の時間列(例えば1時間8分)を持つPandas DataFrameがあります。一部のセルはほんの数分(例えば47分)です。 私はこの形式から整数分の整数値に変換しようとしています(例えば、1時間8分は68になります)。Pythonの時間と分から合計時間への変換

私はそれをハードコーディングしようとしましたが、これは私が比較的新しいPythonのように問題を抱えています。 これを手助けできるライブラリはありますか?

In [10]: df_times = pd.DataFrame(times) 
     df_times.columns = ["times"] 
     df_times 
Out[10]:  times 
     0  31 mins 
     1  1 hour 28 mins 
     2  1 hour 1 min 
     3  1 min 
     ... ... 
     22849 ERROR 
     22850 7 mins 


In [11]: (pd.to_timedelta(df_times["times"].str.replace('mins','min')).dt.total_seconds()//60).astype(int) 
ValueError: unit abbreviation w/o a number 

そして、私はエラーを使用= "強制":

In [12]: (pd.to_timedelta(df_times["times"].str.replace('mins','min'), errors="coerce").dt.total_seconds()//60).astype(int) 
ValueError: Cannot convert NA to integer 

答えて

3

あなたはpandas.to_timedelta()Series.dt.total_seconds()メソッドを使用することができます

In [244]: df 
Out[244]: 
        time 
0  1 hour 8 mins 
1    47 mins 
2 10 hours 12 minutes 
3    1 min 

In [245]: (pd.to_timedelta(df.time.str.replace('mins', 'min')) 
    ...: .dt.total_seconds()//60).astype(int) 
    ...: 
Out[245]: 
0  68 
1  47 
2 612 
3  1 
Name: time, dtype: int32 
+0

を、私はすべてにこれを適用するforループを使用する必要があります?申し訳ありませんが、私はコーディングに新しいです。また、 'dt'と 'total_seconds'はどこから来たのですか?ありがとう! – Heather

+0

@Heather、いいえ、ループは必要ありません。 'pd.to_timedelta()'は、シリーズ全体に適用されるベクトル化された関数です - 私の答えの例を見てください。 '.dt.total_seconds()'ドキュメントへのリンクを追加しました... – MaxU

+0

説明をありがとう。 ValueError:単位の省略形を数値にしているようです。 – Heather

関連する問題