У меня есть очень простая функция, которая предназначена для анализа и переформатирования файла 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 даты истечения срока действия переформатированы на то, чего я не желаю, что можно увидеть ниже:
У меня есть тысячи этих CSV, которые я читаю систематически, поэтому нецелесообразно просматривать и изменять их все. Как я могу разобрать эти строки даты, например. '01-Apr-96'
, и преобразовать их в действительные даты?
Какой желаемый формат даты истечения срока действия?
%m/%d/%Y
- идеальный выход ... но преобразование всех этих столбцов с помощью to_datetime () в форматирование - очень дорогостоящая операция.
Но если он находится в неправильном формате в основном файле .csv
, вам нужно как-то его переформатировать. Это не просто волшебным образом превратится в то, что вы хотите. pd.to_datetime
- это один из вариантов, и я настоятельно рекомендую его, потому что, если вы собираетесь производить какие-либо вычисления с датами, вы, вероятно, в любом случае захотите, чтобы они были datetime
.
Да, но в csv исходное значение в ячейке находится в желаемом мне формате, однако оно переформатировано с использованием некоторой опции Excel (видно на изображении). Мне было интересно, есть ли способ получить базовые данные вместо форматированных данных; если это невозможно, то я полагаю, что это не так.
Ваша проблема - это не проблема pandas / python, а функция Excel. Как вы можете видеть на панели формул на вашем скриншоте Excel (и, как вы говорите, также в вашем csv), даты указаны в желаемом формате (мм / дд / гггг). Но (стандартный) формат Excel в вашей системе другой. В Excel просто выберите столбец и измените формат данных на «мм / дд / гггг». Вы, вероятно, также можете установить это как стандартный формат, если хотите, чтобы Excel открывал все ваши файлы в этом точном формате.
В Windows вы можете изменить стандартный формат даты в настройках конфигурации. Excel по умолчанию будет использовать этот формат для дат, если вы не измените его вручную с помощью формата ячейки. .
Откройте CSV с помощью любого текстового редактора / средства просмотра (например, Блокнота), и вы сможете увидеть файл как есть. Когда вы открываете CSV-файл в Excel, Excel будет пытаться быть полезным и обнаруживать / автоматически форматировать данные, которые он вам показывает.
Понятно ... так что в качестве дополнительного вопроса, как я могу разобрать дату, такую как 01-Apr-96
, и изменить ее на время, которое я хочу? Не похоже, что Excel позволяет мне изменять настройки по умолчанию без необходимости редактировать все файлы вручную.
Я знаю, что каждый год, превышающий 80, должен быть 1980, 1981 и т. д., А все, что меньше 80, должно быть 2001, 2002 и т. д. Я не уверен, как реализовать эту логику в векторизованном виде.
Какой формат ты хочешь?