从日期列表中删除单词日期时间索引



我在熊猫数据帧中有多个日期列表,格式如下:

col1                       col2
1                          [DatetimeIndex(['2018-10-01', '2018-10-02', 
'2018-10-03', '2018-10-04'],
dtype='datetime64[ns]', freq='D')

我想去掉DatetimeIndexdtype='datetime64[ns]', freq='D'这两个词,把清单变成一套。我要寻找的格式是:{'2018-10-01', '2018-10-02', '2018-10-03', '2018-10-04}

Pandas 不是为了保存系列值内的集合而设计的,因此强烈建议不要执行您想要执行的操作。一个更好的主意,特别是如果每个DatetimeIndex系列值中的值数量一致,是联接额外的列:

D = pd.DatetimeIndex(['2018-10-01', '2018-10-02', '2018-10-03', '2018-10-04'],
dtype='datetime64[ns]', freq='D')
df = pd.DataFrame({'col1': [1], 'col2': [D]})
df = df.join(pd.DataFrame(df.pop('col2').values.tolist()))
print(df)
col1          0          1          2          3
0     1 2018-10-01 2018-10-02 2018-10-03 2018-10-04

如果您真的想要一个set作为每个系列值,您可以通过map+set来实现:

df['col2'] = list(map(set, df['col2'].values))
print(df)
col1                                               col2
0     1  {2018-10-01 00:00:00, 2018-10-02 00:00:00, 201...

你试过吗:

set(index_object.tolist())

我怀疑这会返回一组时间戳对象而不是字符串,因此取决于您的用例是否您想要

如果是您想要的字符串,您可以按如下方式修改代码:

set(index_object.dt.strftime("%Y-%m-%d").tolist())

对于您的特定格式(我不一定赞成!(,您可以尝试以下方法:

import itertools
string_lists = col2.apply(lambda x: x.dt.strftime("%Y-%m-%d").tolist())
unique_set = set(itertools.chain.from_iterable(string_lists.tolist()))

最新更新