Типы данных Pandas для собственных типов данных Python

#python #pandas

Вопрос:

Есть ли способ вернуть один стандартный объект python при выборе максимального значения из столбца DF?

Тестовый код:

 import pandas as pd

df = pd.DataFrame({"A": [1,2,3,4], "Date": ['2010-01-01 00:00:01', '2010-02-01 00:00:01', '2019-01-01 00:00:01', '2010-01-01 00:00:01']})

df['Date']= pd.to_datetime(df['Date'])
 

Испытание 1:

 type(df["Date"].max())

pandas._libs.tslibs.timestamps.Timestamp
 

Испытание 2:

 type(df["A"].max())

numpy.dtype[int64]
 

В идеале я хочу иметь функцию, в которую я могу передать DF и имя столбца и получить максимальное значение в стандартном объекте python без необходимости загружать операторы типа if == style.

Песудо-кодовая идея:

 
def find_max(df, col):
    max_val = df[col].max()
    max_val.into_python_type()
    return max_val

x = find_max(df, 'Date')

type(x)

datetime.datetime

x = find_max(df, 'A')

type(x)

int

 

Редактировать

 df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
 0   A       4 non-null      int64         
 1   Date    4 non-null      datetime64[ns]
dtypes: datetime64[ns](1), int64(1)
memory usage: 192.0 bytes
 

введите описание изображения здесь

 pd. __version__ 
'1.2.4'
 

Python 3.9.4

Комментарии:

1. В случае с меткой времени, в какой тип python вы бы хотели ее преобразовать? в python нет формата временных меток, поэтому я бы предположил, что либо строка, либо поплавок?. В случае df["A"].max() , если вы можете просто изменить его на max(df["A"].tolist()) , и он выйдет как тип python.

2. Привет, метка времени в строке будет работать для моего случая использования.

3. В этом случае просто приведите его к строке, т. е. str(df['Date'].max())

4. Процитирую мой первый комментарий: «В случае df["A"].max() , если вы можете просто изменить его на max(df["A"].tolist()) , и он выйдет как тип python»… Если вы это сделаете, он выйдет как python int. Тем не менее, я не понимаю, почему вы хотите, чтобы это был python int, а не numpy int, какая вам разница?

5. Добавлены некоторые правки, чтобы осветить ваши комментарии @Cimbali, было бы неплохо включить строковые и числовые типы. Дата-время-это бонус, но я могу работать и без этого.

Ответ №1:

Решил эту проблему с помощью некоторых идей в комментариях:

     def _get_max_val(self, df, param_name):
        try:
            max = df[param_name].max().tolist()
        except AttributeError:
            max = str(df[param_name].max())
        return max
 

Дает мне то, что мне нужно