Pandas - игнорирование форматированных типов данных при чтении csvs

У меня есть очень простая функция, которая предназначена для анализа и переформатирования файла CSV:

def parseFile(path, cols=[]):
    """
    Parse futures file given in path and re-index, only keep cols provided
    in cols.
    -------------------
    Usage:
        data = parseFileCSI('C:\\data\\66\\ad_9609', ['Open', 'Volume'])
    """

    filename = path.split('\\')[-1].split('.')[0]
    df = pd.read_csv(path, engine='c')
    df['ID'] = filename

    #align column names with TRTH
    df.rename(columns = {'Fut Expiration Date':'ExpirationDate'}, inplace=True)

    df.set_index(['ID', 'ExpirationDate'], inplace=True)

    #keep specified columns
    if cols != []:
        df = df[cols]

    return df

Однако в файлах csv даты истечения срока действия переформатированы на то, чего я не желаю, что можно увидеть ниже:

Pandas - игнорирование форматированных типов данных при чтении csvs

У меня есть тысячи этих CSV, которые я читаю систематически, поэтому нецелесообразно просматривать и изменять их все. Как я могу разобрать эти строки даты, например. '01-Apr-96', и преобразовать их в действительные даты?

Какой формат ты хочешь?

ALollz 26.10.2018 21:26

Какой желаемый формат даты истечения срока действия?

genhernandez 26.10.2018 21:26
%m/%d/%Y - идеальный выход ... но преобразование всех этих столбцов с помощью to_datetime () в форматирование - очень дорогостоящая операция.
Évariste Galois 26.10.2018 21:27

Но если он находится в неправильном формате в основном файле .csv, вам нужно как-то его переформатировать. Это не просто волшебным образом превратится в то, что вы хотите. pd.to_datetime - это один из вариантов, и я настоятельно рекомендую его, потому что, если вы собираетесь производить какие-либо вычисления с датами, вы, вероятно, в любом случае захотите, чтобы они были datetime.

ALollz 26.10.2018 21:33

Да, но в csv исходное значение в ячейке находится в желаемом мне формате, однако оно переформатировано с использованием некоторой опции Excel (видно на изображении). Мне было интересно, есть ли способ получить базовые данные вместо форматированных данных; если это невозможно, то я полагаю, что это не так.

Évariste Galois 26.10.2018 21:58

Ваша проблема - это не проблема pandas / python, а функция Excel. Как вы можете видеть на панели формул на вашем скриншоте Excel (и, как вы говорите, также в вашем csv), даты указаны в желаемом формате (мм / дд / гггг). Но (стандартный) формат Excel в вашей системе другой. В Excel просто выберите столбец и измените формат данных на «мм / дд / гггг». Вы, вероятно, также можете установить это как стандартный формат, если хотите, чтобы Excel открывал все ваши файлы в этом точном формате.

Niels Henkens 26.10.2018 22:35

В Windows вы можете изменить стандартный формат даты в настройках конфигурации. Excel по умолчанию будет использовать этот формат для дат, если вы не измените его вручную с помощью формата ячейки. .

Niels Henkens 26.10.2018 22:42

Откройте CSV с помощью любого текстового редактора / средства просмотра (например, Блокнота), и вы сможете увидеть файл как есть. Когда вы открываете CSV-файл в Excel, Excel будет пытаться быть полезным и обнаруживать / автоматически форматировать данные, которые он вам показывает.

chillin 26.10.2018 23:30

Понятно ... так что в качестве дополнительного вопроса, как я могу разобрать дату, такую ​​как 01-Apr-96, и изменить ее на время, которое я хочу? Не похоже, что Excel позволяет мне изменять настройки по умолчанию без необходимости редактировать все файлы вручную.

Évariste Galois 26.10.2018 23:54

Я знаю, что каждый год, превышающий 80, должен быть 1980, 1981 и т. д., А все, что меньше 80, должно быть 2001, 2002 и т. д. Я не уверен, как реализовать эту логику в векторизованном виде.

Évariste Galois 27.10.2018 00:12
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
10
50
0

Другие вопросы по теме