2017-07-07 88 views
1

我真的是新的大熊貓,我有一個問題如何計算一組時間的平均值。大熊貓的DateFrame子集的平均時間戳

我有列的csv文件:日期,時間,車外溫度

我進口和修改爲:

df = pd.read_csv("./file.csv", parse_dates=[0], dayfirst=True) 
df["Date"] = pd.to_datetime(df["Date"]) 
df["Time"] = pd.to_datetime(df["Time"]).dt.time 

我更喜歡有兩個不同列中的日期和時間單獨和不要將它們用作索引。

我已經採出這樣我需要的部分,並取得了一句:

  Date  Time Outside Temperature 
4343 2006-06-30 13:00:00     15.9 
4344 2006-06-30 13:10:00     15.9 
4345 2006-06-30 13:20:00     15.9 
4346 2006-06-30 13:30:00     15.9 
4347 2006-06-30 13:40:00     15.9 

,你可以在我有不同的時間相同的溫度看,我想有時間的平均值,像:13:22:34

我該怎麼辦?

我檢查了其他問題:Average time for datetime list,我嘗試了幾種方式來訪問的時候,例如:

print(tempdf["Time"].dt.hour) 

,但我得到的錯誤:

AttributeError: Can only use .dt accessor with datetimelike values 

我覺得我做一個轉換爲時間戳錯誤。

你有什麼建議嗎?

我使用python3.5和熊貓0.20.2

非常感謝

Ciccio

編輯:

的時間原始CSV文件的格式爲HH :毫米沒有秒。

回答

1

我想你可以通過to_timedelta使用timedelata s,則轉換爲ns,得到mean和轉換回:

df = pd.read_csv("./file.csv", parse_dates=[0], dayfirst=True) 

a = pd.to_timedelta(df["Time"] + ':00').mean() 
print (a) 
0 days 13:20:00 

a = pd.to_timedelta(pd.to_timedelta(df["Time"] + ':00').values.astype(np.int64).mean()) 
print (a) 
0 days 13:20:00 

如果需要的平均時間爲每個唯一日期:

df['td']= pd.to_timedelta(df["Time"] + ':00').values.astype(np.int64) 
df1 = pd.to_timedelta(df.groupby('Date')['td'].mean()).reset_index() 
print (df1) 
     Date  td 
0 2006-06-30 13:20:00 

...或對於獨特的溫度:

df['td']= pd.to_timedelta(df["Time"] + ':00').values.astype(np.int64) 
df1 = pd.to_timedelta(df.groupby('Outside Temperature')['td'].mean()).reset_index() 
print (df1) 
    Outside Temperature  td 
0     15.9 13:20:00 

...或temperaturetime什麼惡意:

df['Time']= pd.to_timedelta(df["Time"]).values.astype(np.int64) 
df1 = df.groupby('Date', as_index=False).mean() 
df1['Time']= pd.to_timedelta(df1["Time"]) 
print (df1) 
     Date  Time Outside Temperature 
0 2006-06-30 13:20:00     15.9 
+0

感謝您的回答但我得到這個錯誤: TypeError:'datetime.time'類型的對象'沒有len() 在處理上述異常期間,發生了另一個異常: ValueError:timedelta標量的類型無效: cicciodevoto

+0

由於列日期爲通過'parse_date'參數在read_csv中轉換。 'time'列的'type'需要字符串。我添加回答'read_csv'。需要刪除'df [「Date」] = pd.to_datetime(df [「Date」]) df [「Time」] = pd.to_datetime(df [「Time」])。dt.time' – jezrael

+0

Yes sorry後來你的其他答案。 問題是csv文件沒有秒是格式:hh:mm,當我運行它希望格式hh:mm:ss 有沒有辦法避免它? – cicciodevoto

0

要利用時間意味着你轉換時間序列timedelta類型和採取的意思。要獲得的時間和溫度平均爲perticular日期使用GROUPBY

編輯

如果時間列只包含HH:MM 需要在添加秒它

df['Time'] = pd.to_timedelta(df["Time"] + ':00') 
print(df) 

輸出:

  Date  Time Outside Temperature 
0 2006-06-30 13:00:00     15.9 
1 2006-06-30 13:10:00     15.9 
2 2006-06-30 13:20:00     15.9 
3 2006-06-30 13:30:00     15.9 
4 2006-06-30 13:40:00     15.9 

將時間轉換爲int,以便它可以用於groupby

df['Time'] = df['Time'].astype(int) 

集團有效期限欄並獲得平均的時間和室外溫度

df = df.groupby(['Date'])['Time', 'Outside Temperature'].mean() 

現在再次時序轉換爲Timedelta型

df['Time'] = pd.to_timedelta(df['Time']) 

輸出:

   Time Outside Temperature 
Date          
2006-06-30 13:20:00     15.9 
+0

你使用什麼熊貓版本? – jezrael

+0

@jezrael其0.19.1和python版本3.4.3。安裝最新版本0.20.1。 –

+0

我在'0.20.2'中不起作用...我用窗戶和你? – jezrael