#python #pandas #csv #parsing
#python #pandas #csv #синтаксический анализ
Вопрос:
У меня есть str с данными, которые выглядят так
2013/04/15, 54332, 2013/04/16, 67608, 2013/04/17, 56535, 2013/04/18, 46484
где есть дата, а затем значение, как мне перенести это в csv со столбцами как для даты, так и для значений? Я пытался сделать это:
df = pd.Dataframe(list(reader(data)))
df.to_csv('Data.csv', index=False)
но когда я это делаю, он помещает один символ строки в каждую строку и только в один столбец.
Комментарии:
1. просмотрите документацию для python, встроенную в функцию split, чтобы превратить вашу строку, разделенную запятыми, в список. Затем вы можете решить свою проблему с помощью итерации списка.
Ответ №1:
Вы можете сделать следующее:
data = data.replace(' ', '').split(',')
df = pd.DataFrame({'Date': data[::2], 'Value': data[1::2]})
Вывод:
Date Value
0 2013/04/15 54332
1 2013/04/16 67608
2 2013/04/17 56535
3 2013/04/18 46484
Комментарии:
1. почему
replace()
, а не простоsplit(', ')
— т.е. с запятой и пробелом?2. Хорошее предложение @buran! Хотя
split(', ')
это хорошо работает для этого примера данных, это может не сработать, если какой-либо из пробелов отсутствует (или содержит более одного пробела). Использованиеreplace
позволяет избежать таких проблем.3. Предполагается, что ваш код будет работать с образцами данных, предоставленными OP. Они должны указать, есть ли возможность получить другой ввод. Если мы будем придерживаться той же линии рассуждений — что, если вместо запятой будет точка с запятой или разрыв в шаблоне date-value? Только мои 2 цента.
4. Это работает для образцов данных. Раньше я работал с файлами csv, и это довольно распространенные проблемы с пробелами между запятыми и гораздо менее распространенные другие проблемы. Вот почему я это написал (привычка иметь дело с пробелами).
5. Тем не менее, я полностью согласен с тем, что использование
split(', ')
также работает, и это также делает код более чистым (что, я думаю, также важно). Не стесняйтесь редактировать ответ, если хотите.
Ответ №2:
Должно работать следующее:
import pandas as pd
l=[i.strip() for i in s.split(',')]
dates=[l[i] for i in range(0,len(l),2)]
values=[l[i] for i in range(1,len(l),2)]
df=pd.DataFrame({'date':dates, 'value': values})
>>> print(df)
date value
0 2013/04/15 54332
1 2013/04/16 67608
2 2013/04/17 56535
3 2013/04/18 46484
Затем вы можете сохранить ее в виде CSV-файла, как показано ниже:
df.to_csv('Data.csv', index=False)