2016-09-27 69 views
3

嘗試將大熊貓列df['day']解析爲日期時間類型。當前值被寫爲字符串,例如:2016-9-1。這對應於年 - 月日。從破折號的字符串解析Pandas Column

我下面從該頁面的格式: http://strftime.org/

我最初嘗試使用

pd.to_datetime(df['day'], format="%Y-%m-%d") 

,但得到

ValueError: time data 'day' does match format specified 

我想通的問題是,天的錯誤並且月份不是零填充,因此將其更改爲:

pd.to_datetime(df['day'], format="%Y-%-m-%-d") 

我使用的是%-m%-d,因爲它們都對應於非零填充(十進制)數字。

讓不同的錯誤:

ValueError: '-' is a bad directive in format '%Y-%-m-%-d' 

我不應該從如下的http://strftime.org/格式約定,我失去的東西嗎?

回答

3

您需要在參數format刪除-

df = pd.DataFrame({'day':['2016-9-1']}) 
print (df) 
     day 
0 2016-9-1 

print (pd.to_datetime(df['day'], format="%Y-%m-%d")) 
0 2016-09-01 
Name: day, dtype: datetime64[ns] 

編輯:

所以它看起來像一些不好的數據,所以你可以使用:

df = pd.DataFrame({'day':['2016-9-1', '2016-12-0']}) 
print (df) 
     day 
0 2016-9-1 
1 2016-12-0 

#check problematic values 
print (df[pd.to_datetime(df['day'], format="%Y-%m-%d", errors='coerce').isnull()]) 
     day 
1 2016-12-0 

#convert problematic values to NaT 
print (pd.to_datetime(df['day'], format="%Y-%m-%d", errors='coerce')) 
0 2016-09-01 
1   NaT 
Name: day, dtype: datetime64[ns] 
+0

很奇怪,當我運行你的代碼本身,我得到相同的輸出,你。然而,當我在整個數據幀上運行時,我得到'ValueError:時間數據'日'與指定的格式匹配' – Brian

+0

Rargh。你的評估是真實的,這是不好的數據。我不敢相信我浪費了多少時間沒有檢查這個。 – Brian