Python 将推特时间转换为特定格式的Datetime,以计算一天推特的频率

Python 将推特时间转换为特定格式的Datetime,以计算一天推特的频率,python,json,datetime,pandas,twitter,Python,Json,Datetime,Pandas,Twitter,所以我有推特数据,我试图计算我在不同的日子里有多少推特。例如,在10条tweet的列表中,它们可能都是在不同的日子创建的,所以我只想计算出一天(在tweet集合中)有多少条tweet 每个对象都是JSON格式,字段可以作为字典键访问。在本例中,为了确定它是何时创建的,我使用下面的“日期”字段: {'location': [Decimal('-118.3851587'), Decimal('34.0843881')], 'text': "random sample text", 'user': '

所以我有推特数据,我试图计算我在不同的日子里有多少推特。例如,在10条tweet的列表中,它们可能都是在不同的日子创建的,所以我只想计算出一天(在tweet集合中)有多少条tweet

每个对象都是JSON格式,字段可以作为字典键访问。在本例中,为了确定它是何时创建的,我使用下面的“日期”字段:

{'location': [Decimal('-118.3851587'), Decimal('34.0843881')], 'text': "random sample text", 'user': 'random user i cant show', 'id': Decimal('NaN'), 'date': 'Thu Oct 20 02:40:55 +0000 2016'}]
i、 e.原始数据中的日期格式如下:

Thu Oct 20 02:40:55 +0000 2016
我需要将其转换为以下格式:

2016-10-20
我曾计划制作一个pandas数据框,当遇到一个日期时,它会为每个日期创建一个新行,但我担心每次都要遍历并动态添加行的代价很高

因为我知道tweet的具体日期范围,所以我打算创建一个数据框,其中包含预先确定的包含这些日期的行

为此,我使用了以下代码:

from datetime import date, timedelta as td 
d1 = date(2016, 9, 17)
d2 = date(2016, 11, 7)

delta = d2-d1
listOfDates = []
for i in range(delta.days+1):
    print(d1 + td(days=i))
    listOfDates.append(d1 + td(days=i))
这将输出以下日期:

2016-09-17
2016-09-18
2016-09-19
2016-09-20
2016-09-21
...
2016-11-04
2016-11-05
2016-11-06
2016-11-07
这创建了一个从开始到结束的日期列表,我使用它创建了一个数据帧(使用dataframe.set_uindex,其中日期列表中的值成为行值)

但现在,当我浏览我的twitter数据时,我需要动态检查日期字段中的日期,其格式与列中的格式相同(即上面原始数据示例中的2016-10-20)。我有点不知道如何将它动态格式化为上面的特定格式

编辑

新问题(稍微无关,但仍然相关)

所以在我的代码中,我有一个日期列表,但这些都是datetime对象(也就是说,它们是在我的文章中的代码块中生成的,并存储在“listOfDates”中)

我有一个数据框,其中的行是日期,所以我使用了df.set_索引(listOfDates),但它显示错误:“KeyError:datetime.date(2016,9,17)”

如何使列表以正确的格式显示对象,而不是说datetime.date?可能是个愚蠢的问题

事实上,我使用strftime将其转换为正确的格式,但它仍然显示KeyError:“2016-09-17”


我很笨。它是df.index而不是df.set_index

首先创建一些lambda函数来格式化单个字符串

从日期时间导入日期时间
进口稀土
未格式化=“2016年10月20日星期四02:40:55+0000”
#使用re来消除毫秒数。
删除\u ms=lambda x:re.sub(“\+\d+\s”,“x”)
#将字符串设置为datetime对象。
mk_dt=lambda x:datetime.strtime(删除ms(x),%a%b%d%H:%M:%S%Y)
#格式化日期时间对象。
my_form=lambda x:“{:%Y-%m-%d}”。格式(mk_dt(x))
我的表格(未格式化)
>>>'2016-10-20'
现在,您可以假设DataFrame具有相同格式的字符串列,您可以将新函数应用于该列中的所有元素,如下所示:

my_df.dates_column.apply(my_表单)
或者,您可以创建一个lambda函数,在将每个项附加到
for
循环中的列表时对其进行转换

from datetime import date, timedelta as td

# Make a lambda function to directly format your datetime objects.
dt_form = lambda x:"{:%Y-%m-%d}".format(x)

d1 = date(2016, 9, 17)
d2 = date(2016, 11, 7)

delta = d2-d1
listOfDates = []
for i in range(delta.days+1):
#     print(d1 + td(days=i))
    listOfDates.append(dt_form(d1 + td(days=i)))

哦,你是个救命恩人。我不知道怎么用re来做,但我想我现在明白了。谢谢,没问题。如果你打算做更多的python,re模块是很棒的。我强烈建议你研究一下它。它可以节省你很多时间。这是一个非常好的例子。你介意投票表决这个答案吗。我需要分数;)还有一个问题。所以在我的代码中,我有一个日期列表,但这些都是datetime对象(也就是说,它们是在我的文章中的代码块中生成的,并存储在“listOfDates”中)。我有一个数据框,其中的行是日期,所以我使用了df.set_索引(listOfDates),但它显示错误:“KeyError:datetime.date(2016,9,17)”。如何让列表以正确的格式显示对象,而不是说datetime.ate lol。这可能是一个愚蠢的问题……好吧,事实上,我使用strftime将其设置为正确的格式,但它仍然显示KeyError:“2016-09-17”如果没有给出错误的数据帧,调试它有点困难。您是否可以编辑您的问题,以包含我们正在查看的df类型的一个小示例?