Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Pandas中查找日期列的最小值和最大值_Python_Pandas - Fatal编程技术网

Python 在Pandas中查找日期列的最小值和最大值

Python 在Pandas中查找日期列的最小值和最大值,python,pandas,Python,Pandas,嗨,我正在努力在我的数据集中找到日期的最大值和最小值列 以下是我的数据集: customer_final['tran_date'] 0 2014-02-28 1 2014-02-27 2 2014-02-24 3 2014-02-24 4 2014-02-23 ... 23048 2011-01-25 23049 2011-01-25 23050 2011-01-25 23051 2011

嗨,我正在努力在我的数据集中找到日期的最大值和最小值列

以下是我的数据集:

customer_final['tran_date']

0       2014-02-28
1       2014-02-27
2       2014-02-24
3       2014-02-24
4       2014-02-23
           ...    
23048   2011-01-25
23049   2011-01-25
23050   2011-01-25
23051   2011-01-25
23052   2011-01-25
正如我们在数据集中清楚地看到的,我们有2011-01-25之间的数据 至2014年2月28日

但是执行下面提到的代码给了我错误的输出

print(customer_final['tran_date'].max())
print(customer_final['tran_date'].min())

2014-12-02 00:00:00
2011-01-02 00:00:00
任何帮助都将不胜感激

编辑:发布原始数据

transaction_id  cust_id tran_date   prod_subcat_code    prod_cat_code   Qty Rate    Tax total_amt   Store_type
0   80712190438 270351  28-02-2014  1   1   -5  -772    405.300 -4265.300   e-Shop
1   29258453508 270384  27-02-2014  5   3   -5  -1497   785.925 -8270.925   e-Shop
2   51750724947 273420  24-02-2014  6   5   -2  -791    166.110 -1748.110   TeleShop
3   93274880719 271509  24-02-2014  11  6   -3  -1363   429.345 -4518.345   e-Shop
4   51750724947 273420  23-02-2014  6   5   -2  -791    166.110 -1748.110   TeleShop
... ... ... ... ... ... ... ... ... ... ...
23048   94340757522 274550  25-01-2011  12  5   1   1264    132.720 1396.720    e-Shop
23049   89780862956 270022  25-01-2011  4   1   1   677 71.085  748.085 e-Shop
23050   85115299378 271020  25-01-2011  2   6   4   1052    441.840 4649.840    MBR
23051   72870271171 270911  25-01-2011  11  5   3   1142    359.730 3785.730    TeleShop
23052   77960931771 271961  25-01-2011  11  5   1   447 46.935  493.935 TeleShop
编辑2:DF中所有列的数据类型

transaction_id               int64
cust_id                      int64
tran_date           datetime64[ns]
prod_subcat_code             int64
prod_cat_code                int64
Qty                          int64
Rate                         int64
Tax                        float64
total_amt                  float64
Store_type                  object
Unnamed: 10                 object
dtype: object

显然,您的日期(在输入文件中)是用 各种方式

您的一条评论包含时间戳('2014-12-02 00:00:00'), 所以我看到您有%Y-%m-%d格式(可能在大多数情况下), 但在另一个地方,您已经编写了时间数据“2014年12月2日”,所以至少 在某些行中,您有%d/%m/%Y格式

把你的意见整理好。不能将日期格式化为2 不同的格式

编辑 我进行了以下实验:

作为源数据,我使用了部分原始数据(前2行和后2行), 使用具有不同日期格式的附加行(第3行), 存储为字符串变量:

  transaction_id cust_id tran_date prod_subcat_code prod_cat_code Qty Rate Tax total_amt Store_type
3       93274880719 271509  24-02-2014  11  6   -3  -1363   429.345 -4518.345   e-Shop
4       51750724947 273420  23-02-2014  6   5   -2  -791    166.110 -1748.110   TeleShop
40      51750724947 273420  12/2/2014   6   5   -2  -791    166.110 -1748.110   TeleShop
23048   94340757522 274550  25-01-2011  12  5   1   1264    132.720 1396.720    e-Shop
23049   89780862956 270022  25-01-2011  4   1   1   677     71.085  748.085     e-Shop'''
请注意,初始行的开头有一些空格,以提供 索引列的空列名

然后我定义了以下日期解析函数(
import re
required), 即将使用:

def dPars(txt):
    if re.match(r'\d{2}-\d{1,2}-\d{4}', txt):
        return pd.to_datetime(txt, format='%d-%m-%Y')
    if re.match(r'\d{2}/\d{1,2}/\d{4}', txt):
        return pd.to_datetime(txt, format='%d/%m/%Y')
    return txt
我阅读了上述内容,具有上述日期转换功能:

customer_final = pd.read_csv(io.StringIO(txt), delim_whitespace=True,
    index_col=0, parse_dates=['tran_date'], date_parser=dPars)
我打印了tran_date列-
打印(customer_final.tran_date)
-获取

3       2014-02-24
4       2014-02-23
40      2014-02-12
23048   2011-01-25
23049   2011-01-25
Name: tran_date, dtype: datetime64[ns]
因此,所有日期都已按应有的方式解析

我打印了最小/最大日期-
打印(customer_final['tran_date'].min(),customer_final['tran_date'].max())
-获得正确的结果:

2011-01-25 00:00:00 2014-02-24 00:00:00
也许你应该把你的代码建立在我的实验基础上(在你的代码替换中)
io.StringIO(txt)
输入文件名)

另外请注意,如果您有一些格式为
12/2/2014
的输入行,则 12是月号,2是日号(美国日期格式),
而其他行则先有天数。

基本上,您有两个问题:1)查看缩写数据和2)查看未排序数据

您声称:正如我们在数据集中清楚地看到的,我们有2011-01-25到2014-02-28之间的数据。但是,Pandas缩写了未排序的数据,省略了23k行数据框中的许多行,并使用省略号:
。因此,您引用的手动日期检查仅来自无序数据的首尾,这些数据与
min
max
值不匹配

customer_final['tran_date']

# 0       2014-02-28       # <---- HEAD OF UNSORTED DATA
# 1       2014-02-27
# 2       2014-02-24
# 3       2014-02-24
# 4       2014-02-23
#            ...           # <---- OMITTED VALUES OF UNSORTED DATA 
# 23048   2011-01-25
# 23049   2011-01-25
# 23050   2011-01-25
# 23051   2011-01-25
# 23052   2011-01-25       # <---- TAIL OF UNSORTED DATA

你试过这个吗?您的栏目类型是datetime吗?是的,先生!但是运气不好。请尝试获取
customer\u final['tran\u date'].max()。dt.day
在最大位置,查看您的日期时间类型是否正确。@coc018是的,它的数据类型是
datetime64[ns]
我尝试了不同的日期格式,以检查数据集中是否存在任何问题。如果原始字段已经是datetime as,则不能使用格式,因为此类型不允许使用混合类型。OP很可能只是没有对数据进行排序。
# SORT DATA FRAME IN DESCENDING ORDER BY tran_date
customer_final = customer_final.sort_values(by='tran_date', ascending = False)

# VIEW ALL DATA (ABBREVIATED UNLESS YOU CHANGE SETTING)
customer_final['tran_date']

# VIEW FIRST VALUES (DEFAULT TO 5)
customer_final['tran_date'].head(5)

# VIEW LAST VALUES (DEFAULT TO 5)
customer_final['tran_date'].tail(5)