2017-02-09 114 views
2

我有日期和時間csv文件第一列(PERIOD_START_TIME),但我需要把它們分成兩個不同的列(日期,時間),所以我需要你的幫助......如何使用python在csv中從同一列中分割日期和時間?

PERIOD_START_TIME 
01.31.2017 13:00:00 
01.31.2017 14:00:00 
01.31.2017 15:00:00 
01.31.2017 16:00:00 
01.31.2017 17:00:00 
01.31.2017 18:00:00 
01.31.2017 19:00:00 
01.31.2017 20:00:00 
01.31.2017 21:00:00 
01.31.2017 22:00:00 
01.31.2017 23:00:00 
02.01.2017 00:00:00 
02.01.2017 01:00:00 
02.01.2017 02:00:00 
02.01.2017 03:00:00 

回答

0

PERIOD_START_TIME可能不是datetime。確保它是。

df['PERIOD_START_TIME'] = pd.to_datetime(df['PERIOD_START_TIME']) 

訪問通過dt訪問的datetime屬性。

df['date'] = df.PERIOD_START_TIME.dt.date 
df['time'] = df.PERIOD_START_TIME.dt.time 

print(df) 

    PERIOD_START_TIME  date  time 
0 2017-01-31 13:00:00 2017-01-31 13:00:00 
1 2017-01-31 14:00:00 2017-01-31 14:00:00 
2 2017-01-31 15:00:00 2017-01-31 15:00:00 
3 2017-01-31 16:00:00 2017-01-31 16:00:00 
4 2017-01-31 17:00:00 2017-01-31 17:00:00 
5 2017-01-31 18:00:00 2017-01-31 18:00:00 
6 2017-01-31 19:00:00 2017-01-31 19:00:00 
7 2017-01-31 20:00:00 2017-01-31 20:00:00 
8 2017-01-31 21:00:00 2017-01-31 21:00:00 
9 2017-01-31 22:00:00 2017-01-31 22:00:00 
10 2017-01-31 23:00:00 2017-01-31 23:00:00 
11 2017-02-01 00:00:00 2017-02-01 00:00:00 
12 2017-02-01 01:00:00 2017-02-01 01:00:00 
13 2017-02-01 02:00:00 2017-02-01 02:00:00 
14 2017-02-01 03:00:00 2017-02-01 03:00:00 

設置

import pandas as pd 
from io import StringIO 

txt = """PERIOD_START_TIME 
01.31.2017 13:00:00 
01.31.2017 14:00:00 
01.31.2017 15:00:00 
01.31.2017 16:00:00 
01.31.2017 17:00:00 
01.31.2017 18:00:00 
01.31.2017 19:00:00 
01.31.2017 20:00:00 
01.31.2017 21:00:00 
01.31.2017 22:00:00 
01.31.2017 23:00:00 
02.01.2017 00:00:00 
02.01.2017 01:00:00 
02.01.2017 02:00:00 
02.01.2017 03:00:00 """ 

df = pd.read_csv(StringIO(txt), parse_dates=[0]) 
+0

謝謝,但它不會工作:AttributeError的:只能使用.DT訪問與datetimelike值 – jovicbg

+0

@ jovicbg看到更新的帖子,看看是否有效。 – piRSquared

+0

現在是未知字符串格式 當我使用此: DF = df.assign(DATETIME = pd.to_datetime(DF [ 'PERIOD_START_TIME'])) DF = df.assign(DATE = DF [ 'DATETIME']。 map(lambda t:t.date())) df = df.assign(TIME = df ['DATETIME']。map(lambda t:t.time())) 它不能打印df,沒有錯誤,但沒有發生,像它被凍結 – jovicbg

0

如果你需要的是一個「日期」和「時間」欄進行拆分的列「PERIOD_START_TIME」,相信下面的代碼會做(Python 3中):

#!/usr/bin/env python3 
# you may have to change "python3" to "python" depending on your setup. 

import csv 

# assuming your csv is separated by spaces, like the sample 
# also assuming that the the input file is named 'input.csv' 
with open('input.csv', newline='') as csv_input: 
    csv_reader = csv.reader(csv_input, delimiter=' ') 
    next(csv_reader) # skips the header 
    with open('output.csv', 'w', newline='') as csv_output: 
     csv_writer = csv.writer(csv_output, delimiter=' ') 
     csv_writer.writerow(['DATE', 'TIME']) 
     for row in csv_reader: 
      csv_writer.writerow([row[0], row[1]]) 
+0

我發現了很多錯誤,換行符,csv未定義等,但我認爲我的csv文件有問題,所以現在沒有任何幫助。 謝謝。 – jovicbg

+0

添加shebang行來指定python環境,這應該修復「未定義」的錯誤。根據您的設置,您可以將python3更改爲python,python3.6等。另外,在文件末尾添加空白行:) – sl0wcheetah

相關問題