Python Pandas Функция read_csv не позволяет преобразовывать проанализированные даты в требуемый формат - PullRequest
0 голосов
/ 20 апреля 2020

Я python новичок и пытаюсь прочитать CSV-файл с pandas. Проблема в том, что столбец даты в csv имеет следующий формат: 2020-03-12 00: 00: 00 + 00: 00. Уже в функции read_csv я хочу изменить формат даты на isoformat (% Y-% m-% d). Я перепробовал все решения stackoverflow, но ни одно из них не работает. Это мой код:

import time
from datetime import date

url = 'https://www.arcgis.com/sharing/rest/content/items/f10774f1c63e40168479a1feb6c7ca74/data'
countries = pd.read_csv(url,
                     usecols=[2, 5, 8],
                     index_col=['Landkreis', 'Meldedatum'],
                     parse_dates=['Meldedatum'],
                     squeeze=True
                       ).sort_index()

Текущий результат

В столбце «Meldedatum» должна отображаться только дата, а не часы и минуты. Тем не менее, я не могу изменить формат, потому что это столбец индекса.

Ваша помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Считайте ваш CSV нормально в dataframe без указания какого-либо формата.

Затем сделайте это:

countries['Meldedatum'] = pd.to_datetime(countries['Meldedatum'])

Это должно дать вам нужный формат.

0 голосов
/ 20 апреля 2020

Именно так pandas отображает объект datetime. Он всегда сохраняет поля в течение часов / минут / секунд / миллисекунд, даже если они все установлены в ноль. Вы не можете изменить это внутреннее представление.

Однако вы можете преобразовать datetime объекты в строку, чтобы отформатировать их представление так, как вы хотите. Имейте в виду, что в процессе работы вы теряете все функции datetime объекта.

Похоже, вы хотите посчитать количество вхождений в день. Если это так, вы должны использовать объект groupby. Нам не нужно устанавливать столбцы индекса или даты разбора в этом случае. Мы также можем преобразовать представление datetime объектов в строки, если вы предпочитаете:

import time
from datetime import date 

import pandas as pd 

# get the data
url = 'https://www.arcgis.com/sharing/rest/content/items/f10774f1c63e40168479a1feb6c7ca74/data' 
countries = pd.read_csv(url, usecols=[2, 5, 8], index_col=None, squeeze=True).sort_index()
# modify dates to strings
countries['Meldedatum'] = countries.Meldedatum.astype(str).apply(lambda x: x.split('T')[0])
# group by Landkreis and Meldedatum
grouped_countries = countries.groupby(['Landkreis', 'Meldedatum']).count()

print(grouped_countries)

# output:
                               AnzahlFall
Landkreis          Meldedatum                 
LK Ahrweiler       2020-03-12           5
                   2020-03-13           2
                   2020-03-14           1
                   2020-03-16           3
                   2020-03-17           5
...                                   ...
StadtRegion Aachen 2020-04-14           8
                   2020-04-15          37
                   2020-04-16          23
                   2020-04-17          18
                   2020-04-18           5
...