Создать индекс даты при импорте нескольких CSV из имен файлов - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть 250 файлов CSV в папке, я использовал следующий код для импорта их в один фрейм данных:

files = "~/*.csv"
df = pd.concat([pd.read_csv(f, dtype='str') for f in glob.glob(files)], ignore_index=True)

Моя проблема в том, что у меня нет информации о дате в любом из файлов, датаупоминается в имени файла, как "LSH_190207", что 7-Feb-2019.Есть ли способ, которым я могу включить эту информацию в кадре данных при импорте файлов, предпочтительно в качестве индекса.Или, по крайней мере, создайте новый столбец, который будет содержать имена файлов, чтобы я мог позже разделить и отформатировать его в столбец даты.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Создайте Datetimeindex в понимании линий и передайте его параметру keys в concat, только необходимо удалить второй уровень MultiIndex с помощью reset_index:

idx = pd.to_datetime([f.split("_")[2] for f in files])
print (idx)

df = pd.concat([pd.read_csv(f, dtype='str') for f in files], 
                keys = idx).reset_index(level=1, drop=True)
0 голосов
/ 10 февраля 2019

Да, вы можете,

Предполагая, что список файлов

files = glob.glob('*.csv')
#['file1_LSH_190207_something.csv', 'file2_LSH_190208_something.csv']
#[f.split("_")[2] for f in files] gives ['190207', '190208']

Это создаст столбец даты со значением даты в виде строки:

df= pd.concat([pd.read_csv(f, dtype='str').assign(date= f.split("_")[2]) for f in files],\
                                                                  ignore_index=True)

Пример вывода:

   A  B  C    date
0  1  2  3  190207
1  4  5  6  190207
2  5  6  8  190208
3  9  1  3  190208

Отправьте это, вы можете сделать следующее, чтобы преобразовать дату в ваш собственный формат:

pd.to_datetime(df['date']).dt.strftime('%d-%b-%Y')

0    07-Feb-2019
1    08-Feb-2019
2    09-Feb-2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...