列出 pandas 数据框中某列中的所有日期

问题描述 投票:0回答:1

我是Python和Pandas的初学者

以下是我的 pandas 数据框的一部分。

我想提取 INTERVAL_DATETIME 列中的所有日期。

如2020年11月16日、2020年5月31日......2023年11月21日。我不想重复日期,

我找不到办法做到这一点。

如果有人能帮助我,我将不胜感激。

python pandas date row
1个回答
1
投票

用途:

df = pd.DataFrame( {'INTERVAL_DATETIME': ['6/11/2020 16:30', 
                                          '6/11/2020 17:00', 
                                          '31/05/2020 18:00',
                                          '31/05/2020 18:30',
                                          '21/11/2023 18:00']})

print (df)
  INTERVAL_DATETIME
0   6/11/2020 16:30
1   6/11/2020 17:00
2  31/05/2020 18:00
3  31/05/2020 18:30
4  21/11/2023 18:00

L = df.INTERVAL_DATETIME.str.split().str[0].unique().tolist()
print (L)
['6/11/2020', '31/05/2020', '21/11/2023']

解释

首先按空格使用

Series.str.split
,因此没有
sep
参数 - 输出是列表:

print (df.INTERVAL_DATETIME.str.split())
0     [6/11/2020, 16:30]
1     [6/11/2020, 17:00]
2    [31/05/2020, 18:00]
3    [31/05/2020, 18:30]
4    [21/11/2023, 18:00]
Name: INTERVAL_DATETIME, dtype: object

然后通过索引选择第一个列表

str[0]

print (df.INTERVAL_DATETIME.str.split().str[0])
0     6/11/2020
1     6/11/2020
2    31/05/2020
3    31/05/2020
4    21/11/2023
Name: INTERVAL_DATETIME, dtype: object

通过

Series.unique
:

获取 numpy 数组的唯一值
print (df.INTERVAL_DATETIME.str.split().str[0].unique())
['6/11/2020' '31/05/2020' '21/11/2023']

...最后转换为列表:

print (df.INTERVAL_DATETIME.str.split().str[0].unique().tolist())
['6/11/2020', '31/05/2020', '21/11/2023']

或者使用

Series.str.extract
在第一个空格之前获取值:

L = df.INTERVAL_DATETIME.str.extract(r'^(.*)\s+', expand=False).unique().tolist()
print (L)
['6/11/2020', '31/05/2020', '21/11/2023']

如果需要格式为

YYYY-MM-DD
的字符串日期,解决方案是使用
to_datetime
Series.dt.strftime
:

L = (pd.to_datetime(df.INTERVAL_DATETIME, dayfirst=True)
       .dt.strftime('%Y-%m-%d').unique().tolist())
print (L)
['2020-11-06', '2020-05-31', '2023-11-21']

对于日期,请使用

Series.dt.date
代替
strftime
:

L = pd.to_datetime(df.INTERVAL_DATETIME, dayfirst=True).dt.date.unique().tolist()
print (L)
[datetime.date(2020, 11, 6), datetime.date(2020, 5, 31), datetime.date(2023, 11, 21)]
© www.soinside.com 2019 - 2024. All rights reserved.