Преобразование формата даты и времени при импорте файла CSV в Python

#python #dataframe #csv #date #datetime

#python #фрейм данных #csv #Дата #дата и время

Вопрос:

Я еще не смог найти решение в подобных вопросах, поэтому мне придется попробовать это здесь. Я импортирую файл CSV, выглядящий следующим образом в блокноте:

 ",""ItemName"""
"Time,""Raw Values"""
"7/19/2019  10:31:29 PM,"" 0"","
"7/19/2019  10:32:01 PM,"" 1"","
  

Что я хочу, когда я сохраняю его как новый CSV, так это переформатировать дату / время и соответствующее значение для этого (требуется программным обеспечением для анализа): точка с запятой в качестве разделителя и в конце важна, и мне действительно не нужен заголовок.

 2019-07-19 22:31:29;0;
2019-07-19 22:32:01;1;
  

Вот как это выглядит в Python:

 Item1 = pd.read_csv(r'.DatafilesItemName.csv')
Item1

#Output:
# ,"ItemName"
# 0 Time,"Raw Values"
# 1 7/19/2019 10:31:29 AM," 0",
# 2 7/19/2019 10:32:01 AM," 1",

valve_G1.dtypes
# ,"ItemName"    object
# dtype: object
  

Я пытался использовать datetime без какой-либо удачи, но может быть что-то подозрительное с типами данных, о которых я не знаю.

Ответ №1:

В принципе, вы хотите прочитать в DataFrame, преобразовать столбец datetime и снова экспортировать df в csv. Я думаю, вам нужно будет избавиться от символов кавычек, чтобы получить правильный импорт. Вы можете сделать это, прочитав содержимое файла в строку, заменив ‘»‘ и передав эту строку в pandas.read_csv. EX:

 import os
from io import StringIO
import pandas as pd

# this is just to give an example:
s='''",""ItemName"""
"Time,""Raw Values"""
"7/19/2019 10:31:29 PM,"" 0"","
"7/19/2019 10:32:01 PM,"" 1"","'''
f = StringIO(s)
# in your script, make f a file pointer instead, e.g.
# with open('path_to_input.csv', 'r') as f:

# now get rid of the "
csvcontent = ''
for row in f:
    csvcontent  = row.replace('"', '')
        
# read to DataFrame
df = pd.read_csv(StringIO(csvcontent), sep=',', skiprows=1, index_col=False)
df['Time'] = pd.to_datetime(df['Time'])

# save cleaned output as ;-separated csv
dst = 'path_where_to_save.csv'
df.to_csv(dst, index=False, sep=';', line_terminator=';' os.linesep)
  

Комментарии:

1. Это работает отлично! Можно ли также добавить точку с запятой в конце? Теперь он возвращает 2019-07-19 10:31:29;0, но мне бы очень хотелось 2019-07-19 10:31:29;0;

2. @Henning: конечно, вы могли бы добавить его, указав в качестве разделителя строк точку с запятой разделитель строк по умолчанию в вашей ОС.