Конвертировать время из «объекта серии модуля pandas.core.series» в строку в Python - PullRequest
1 голос
/ 30 апреля 2019

Мне нужно получить значение последней ячейки электронной таблицы Excel с Python, используя pandas.read_excel.Эта ячейка содержит дату, которую мне нужно присвоить переменной в моем скрипте Python.Формат: 2018-10-15 21: 20: 00.

Мне нужно преобразовать эту дату в строку без временной части, поэтому в этом примере мне просто нужно 2018-10-15.

Я пытался:

pd.read_excel('spreadsheet.xlsx')['column1'][-1:].astype('datetime64[D]')

, но когда я использую .values ​​(), чтобы извлечь его значение, я получаю, что объект 'numpy.ndarray' не вызывается.

I 'Мы также попробовали:

pd.read_excel('spreadsheet.xlsx')['column1'][-1:].strftime('%Y-%m-%d') 

, но я получил 'Объект серии не имеет атрибута strftime'.

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Если вам просто нужна дата из отметки времени, как в значениях b ниже, сначала убедитесь, что dtype для серии является объектом даты и времени, а затем используйте dt.date, чтобы извлечь только дату:

In [24]: df = pd.DataFrame({'a':[1,2,3], 'b':['2018-10-16 22:20:00', '2018-10-15 18:20:00','2018-10-18 21:20:00']})

In [25]: df
Out[25]:
   a                    b
0  1  2018-10-16 22:20:00
1  2  2018-10-15 18:20:00
2  3  2018-10-18 21:20:00

In [26]: df['b'] = pd.to_datetime(df['b'])

In [27]: df
Out[27]:
   a                   b
0  1 2018-10-16 22:20:00
1  2 2018-10-15 18:20:00
2  3 2018-10-18 21:20:00

In [28]: df['b'].dtype
Out[28]: dtype('<M8[ns]')

In [33]: df['date'] = df['b'].dt.date

In [34]: df
Out[34]:
   a                   b        date
0  1 2018-10-16 22:20:00  2018-10-16
1  2 2018-10-15 18:20:00  2018-10-15
2  3 2018-10-18 21:20:00  2018-10-18
0 голосов
/ 30 апреля 2019

Первый pd.DataFrame.values - это атрибут, а не метод, поэтому он не может быть вызван,
Тогда самый простой способ преобразовать строку во временные ряды - это использовать функцию pd.to_datetime, почему вы можете добавить аргумент формата, в вашем случае

series= pd.read_excel('spreadsheet.xlsx')['column1'][-1:]
series= pd.to_datetime(series.apply(lamba x: x[:10]), format='%Y-%m-%d')

Обратите внимание, что лямбда-функция позволяет вам сохранять только первые 10 букв содержимого строки,
Вот очень хороший документ https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html

...