Как создать словарь в Python из csv-файла с учетом значений даты и времени?

#python #pandas #dictionary

#python #pandas #словарь

Вопрос:

У меня есть csv-файл, содержащий значения активности пользователя в социальных сетях за 20 дней. Я хочу получить подробную информацию об активности пользователя в день 1. Вот пример записей в csv

 DateTime                  Instagram  Facebook   Twitter
(2020,09,01,10,00,00)        Y          N         Y
(2020,09,01,10,01,00)        N          Y         Y
(2020,09,01,10,02,00)        N          Y         N
(2020,09,01,10,03,00)        N          Y         N
(2020,09,01,10,04,00)        Y          N         Y
(2020,09,01,11,00,00)        Y          N         N
(2020,09,02,10,00,00)        N          Y         Y
(2020,09,02,10,00,00)        Y          N         N
(2020,09,02,10,00,00)        N          N         N
(2020,09,03,10,00,00)        Y          Y         Y
  

Здесь DateTime столбец представляет собой объект datetime в формате (год, месяц, дата, час, минута, секунда) и в соответствии со значениями, даже если один пользователь активен в приложении для социальных сетей, тогда он считается как Y, если нет, то N

Я создал словарь с именем dict_1, где я хочу, чтобы результат выглядел следующим образом

 {'Instagram':[Y,N,N,N,Y,Y],
 'Facebook':[N,Y,Y,Y,N,N],
 'Twitter':[Y,Y,N,N,Y,N]}
  

Я написал фрагмент кода для вычисления количества строк до 1-го дня

 initial=dataset[DateTime[0]].date().day
final=inital 1
days_x=[]
i=0
while(initial<final):
    cons_date=dataset[DateTime[i]].date().day
    initial=cons_date.date().day
    days_x.append((cons_date.date().day,"-",cons_date.date().month," ",cons_date.time().hour,":",cons_date.time().minute))
    i =1
  

Теперь я написал фрагмент кода, чтобы получить результат, подобный тому, который я показал выше для словаря

 dict_1={}
for i in range(1, len(dataset.columns)):
  if(dataset.columns[i] not in dict_1):
    dict_1[dataset.columns[i]]=[dataset[dataset.columns[i][:len(days_x)]]]
  

но тогда все строки в столбце включаются в него, и я получаю вывод вместе с индексом следующим образом

 {'Instagram':[0 Y
              1 N
              .....and so on

  

Как мне это исправить?

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

1. пожалуйста, покажите, как должен выглядеть окончательный диктант

2. @luigigi проверьте вопрос, который я отредактировал, желаемый раздел вывода выделяется вторым выделенным блоком

Ответ №1:

Я изменил DateTime столбец на формат pandas datetime и сгруппировал по дате. Затем создайте dict для каждого дня:

 df['DateTime'] = pd.to_datetime(df['DateTime'], format='(%Y,%m,%d,%H,%M,%S)')

for idx, d in df.groupby(df['DateTime'].dt.date):
    print(d.drop('DateTime', axis=1).to_dict('list'))
    
{'Instagram': ['Y', 'N', 'N', 'N', 'Y', 'Y'], 'Facebook': ['N', 'Y', 'Y', 'Y', 'N', 'N'], 'Twitter': ['Y', 'Y', 'N', 'N', 'Y', 'N']}
{'Instagram': ['N', 'Y', 'N'], 'Facebook': ['Y', 'N', 'N'], 'Twitter': ['Y', 'N', 'N']}
{'Instagram': ['Y'], 'Facebook': ['Y'], 'Twitter': ['Y']}