#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: конечно, вы могли бы добавить его, указав в качестве разделителя строк точку с запятой разделитель строк по умолчанию в вашей ОС.