我在熊猫数据帧中有多个日期列表,格式如下:
col1 col2
1 [DatetimeIndex(['2018-10-01', '2018-10-02',
'2018-10-03', '2018-10-04'],
dtype='datetime64[ns]', freq='D')
我想去掉DatetimeIndex
和dtype='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()))