我有一个csv数据集,其中逐行包含许多Unix时间戳以及一些坐标:
"2018-07-13 14:04:53",20.61467382,-100.40038540
"2018-07-13 14:04:53",20.61507289,-100.40076548
"2018-07-13 14:04:53",20.61516937,-100.40073449
"2018-07-13 15:01:25",20.61535620,-100.40057307
"2018-07-13 15:01:25",20.59975566,-100.37821134
"2018-07-14 12:55:13",20.59858772,-100.37838086
"2018-07-14 13:08:06",20.59864831,-100.37822228
"2018-07-14 21:51:54",20.59862009,-100.37835681
"2018-07-15 11:53:47",20.59875168,-100.37830434
"2018-07-15 12:02:01",20.59861465,-100.37837653
我想计算出现的不同日期的数量。我怎样才能做到这一点? 在这种情况下,对于此数据集,我的for循环的正确结果将是3。7月13日,14日和15日。我想我必须每天使用熊猫对其进行排序?
答案 0 :(得分:3)
假设这些列是日期时间列
df.iloc[:, 0].dt.normalize().nunique()
3
只需确定
pd.to_datetime(df.iloc[:, 0]).dt.normalize().nunique()
3
dt
是日期时间访问器,允许您获取date
属性,该属性是日期时间的日期部分。然后nunique
通过获取唯一值的数量来完成工作。
根据@root的建议dt.normalize()
(而非dt.date
答案 1 :(得分:1)
使用哈希集!
import csv
with open('dates.csv', 'rb') as csvfile:
data = list(csv.reader(csvfile))
unique_dates = set()
for row in data:
date = row[0].split()[0]
unique_dates.add(date)
print 'We have {} unique dates !'.format(len(unique_dates))
答案 2 :(得分:0)
一旦您读入DataFrame
文件,就可以使用datetimes
和set
理解而不使用csv
来获得相同结果的方法
In [18]: import csv
In [19]: import datetime
In [21]: with open('dates.csv') as csvfile:
...: data = list(csv.reader(csvfile))
In [22]: {datetime.datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S').date() for row in data)}
Out[22]:
{datetime.date(2018, 7, 13),
datetime.date(2018, 7, 14),
datetime.date(2018, 7, 15)}