2016-02-07 48 views
0

現在我有一個.csv文件,帶有一列時間,例如「20140203 00:00:03.132」,我怎樣纔能有效地刪除秒部分(「:03.132」)?數據量很大,我試着用sed預處理數據,但速度太慢了!如何使用熊貓解析CSV文件?

我現在正在嘗試解析熊貓中的.csv文件。無論如何,我可以有效地處理這個問題嗎?熊貓以外的方法也是受歡迎的!

+0

如果您沒有羣集來執行操作,那麼您嘗試的任何操作都會變慢,因爲它將全部在一臺機器上完成 –

+0

熊貓可能不是最快的方式...... afaik,它只是用來標準的csv模塊,帶有額外的處理,包括試圖強制所有數據類型;字符串操作速度更快,所以使用迭代式csv閱讀器會更快。我們在談論多少數據? –

回答

1

有解析時間戳方便的庫:datetime

import datetime 
x = '20140203 00:00:03.132' 
timestamp = datetime.datetime.strptime(x, '%Y%m%d %H:%M:%S.%f') 
print datetime.datetime.strftime(timestamp, '%Y%m%d %H:%M') # 20140203 00:00 

還是因爲它是一個巨大的數據量有點慢,你可以在第一:從右邊分裂,然後在第一個結果列表中的元素:

print x.rsplit(':', 1)[0] # 20140203 00:00 
+0

我嘗試過,但考慮到數據量巨大,速度很慢。 – xxx222

+0

@ xxx222夠公平的。你可以將字符串分割到最後一個':'上,就像這樣'print x.rsplit(':',1)[0]'這會產生相同的結果,這將是一個快速的操作。 – olofom

1

看看該date_parser參數pandas.read_csv()。沿此線的東西應該工作:

import dateutil 
from pandas import read_csv 

def my_date_parser(seq): 
    return [dateutil.parser.parse(s[:14]) for s in seq] 

csv = read_csv('file.csv', parse_dates=[3], date_parser=my_date_parser) 

你可能還需要提供參數parse_dates敲定包含日期字符串列(一個或多個),例如上面指定第3列作爲日期列。