我是Python和Pandas的初学者
以下是我的 pandas 数据框的一部分。
我想提取 INTERVAL_DATETIME 列中的所有日期。
如2020年11月16日、2020年5月31日......2023年11月21日。我不想重复日期,
我找不到办法做到这一点。
如果有人能帮助我,我将不胜感激。
用途:
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)]