TransWikia.com

Python. Как перенести данные с словарь и упорядочить данные

Stack Overflow на русском Asked on November 26, 2020

date_list = ['20150101', '20150102', '20150103', .... '20200901', '20200902', '20200903', '20200904', '20200905']

Есть текстовой файл в котором содежриться информация вида:

...
[6246, '2015070100', 5876, '2015070200', 6365, '2015070300', 8511, '2015070400', 6232 ... 9616, '2020080300', 7960, '2020080400', 7018, '2020080500', 7500, '2020080600']
[0, '2020080600', 0, '2020080600', 0, '2020080600', 0, '2020080600', ... 0, '2020080600', 0, '2020080600', 0, '2020080600']
[9126, '2015070100', 8195, '2015070200', 8081, '2015070300', ... 11411, '2020080400', 7497, '2020080500', 7053, '2020080600']
[5597, '2015070100', 5851, '2015070200', 4890, '2015070300', 4547, ... 3695, '2020080300', 3488, '2020080400', 3930, '2020080500', 3941, '2020080600']
...

Причем это списки, записанные в текстовой файл

  1. как прочитать так информацию из файла, так чтобы это был словарь в котором уникальное значение это "2015070100", "2015070300" и похожие (дата) а значение это числа или же значение 0?

  2. Как сделать так чтобы, некоторые строки списков содержат меньше элементов чем может быть как date_list. Если в строке отсуствует дата, то вставить ее, а значение поставить "0"?

Порядок важен, ибо далее бы хотела бы записать информацию в csv виде, если взять за основу пример данных выше

date,Rage (video game),Yooka-Laylee,Need for Speed: Shift
2015-07-01,6246,0,9126,5597,...
2015-07-02,5876,6365,8511,6232,...
....
2020-09-05,7018,0,7497,3930...
2020-09-06,7500,0,7053,3941...
  1. Как записать эти данные в csv данные "Транспонирование данных из строк в столбцы"

One Answer

Если я правильно понял задачу то из вот таких данных в файле:

[6246, '2015070100', 5876, '2015070200', 6365, '2015070300', 8511, '2015070400', 6232 ... 9616, '2020080300', 7960, '2020080400', 7018, '2020080500', 7500, '2020080600']
[0, '2020080600', 0, '2020080600', 0, '2020080600', 0, '2020080600', 0, '2020080600', 0, '2020080600', 0, '2020080600']
[9126, '2015070100', 8195, '2015070200', 8081, '2015070300', 11411, '2020080400', 7497, '2020080500', 7053, '2020080600']
[5597, '2015070100', 5851, '2015070200', 4890, '2015070300', 4547, '2020080300', 3488, '2020080400', 3930, '2020080500', 3941, '2020080600']

Должно получиться что-то такое:

import re
from datetime import datetime
import pandas as pd  # pip install pandas (если не установлено)

_dict = dict()
with open('data.txt', 'r', encoding='utf-8') as data:
    for line in data.readlines():
        clear_line = re.sub(r'[^,d]', '', line).split(',')
        for index, date_str in zip(clear_line[::2], clear_line[1::2]):
            date_value = datetime.strptime(date_str, '%Y%m%d%H').date().__str__()
            _dict.setdefault(date_value, [])
            _dict[date_value] += [index]
max_len = max(len(_dict[val]) for val in _dict)
for key in _dict:
    _dict[key].extend([0] * (max_len - len(_dict[key])))

pd.DataFrame(_dict).to_csv('test.csv', index=False, sep=';', quoting=2)

Вывода test.csv:

"2015-07-01";"2015-07-02";"2015-07-03";"2015-07-04";"2020-08-03";"2020-08-04";"2020-08-05";"2020-08-06"
"6246";"5876";"6365";"8511";"62329616";"7960";"7018";"7500"
"9126";"8195";"8081";0;"4547";"11411";"7497";"0"
"5597";"5851";"4890";0;0;"3488";"3930";"0"
0;0;0;0;0;0;0;"0"
0;0;0;0;0;0;0;"0"
0;0;0;0;0;0;0;"0"
0;0;0;0;0;0;0;"0"
0;0;0;0;0;0;0;"0"
0;0;0;0;0;0;0;"7053"
0;0;0;0;0;0;0;"3941"

UPD
или так: (вместо pd.DataFrame(_dict).to_csv('test.csv', index=False, sep=';', quoting=2)

for key in _dict:
    print(key, *_dict[key], sep=',', file=open('test.txt', 'a', encoding='utf-8'))

# Если нужна сортировка по дате то
for key in sorted([*_dict.keys()], key=datetime.fromisoformat):
    print(key, *_dict[key], sep=',', file=open('test.txt', 'a', encoding='utf-8'))

вывод test.txt:

2015-07-01,6246,9126,5597,0,0,0,0,0,0,0
2015-07-02,5876,8195,5851,0,0,0,0,0,0,0
2015-07-03,6365,8081,4890,0,0,0,0,0,0,0
2015-07-04,8511,0,0,0,0,0,0,0,0,0
2020-08-03,62329616,4547,0,0,0,0,0,0,0,0
2020-08-04,7960,11411,3488,0,0,0,0,0,0,0
2020-08-05,7018,7497,3930,0,0,0,0,0,0,0
2020-08-06,7500,0,0,0,0,0,0,0,7053,3941

Answered by Namerek on November 26, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP