2017-07-26 52 views
0

我試圖清理和從D「對象」到D型「日期時間」轉換成一個數據幀的一些列:如何加快這個程序?

column_names = ['col a','col b', ...'col n'] 
df[column_names] = df[column_names].apply(pd.to_datetime, format = '%m/%Y') 

但這似乎需要很長的時間 - 而現在我只清洗一個更大的文件的子集。

有沒有更快的方法來實現這一目標?

我注意到這個文件通過pd.read_csv打開,甚至'parse_dates'設置爲True時,相關的列被讀爲'object'。

+0

什麼是日期的格式? – jezrael

回答

0

對我來說,它完美的作品:

import pandas as pd 
from pandas.compat import StringIO 

temp=u"""a;b;c 
2/2015;4/2016;4""" 
#after testing replace 'StringIO(temp)' to 'filename.csv' 
df = pd.read_csv(StringIO(temp), sep=";", parse_dates=[0,1]) 

print (df) 
      a   b c 
0 2015-02-01 2016-04-01 4 

print (df.dtypes) 
a datetime64[ns] 
b datetime64[ns] 
c    int64 
dtype: object 

您還可以自定義解析器:

parser = lambda x: pd.to_datetime(x, format='%m/%Y', errors='coerce') 
df = pd.read_csv(StringIO(temp), sep=";", parse_dates=[0,1], date_parser=parser) 

print (df) 
      a   b c 
0 2015-02-01 2016-04-01 4 

print (df.dtypes) 
a datetime64[ns] 
b datetime64[ns] 
c    int64 
dtype: object 
+0

不知道命令行'parse_dates = [0,1]'是幹什麼的?你的第二個建議幾乎肯定會花費我的代碼,除非我錯過了一些東西。 – GPB

+0

它選擇第一和第二列,並嘗試轉換爲日期時間 – jezrael

+0

我會時間兩個.... tnx! – GPB