Python 什么是按日期和时间过滤csv数据的方法,而不使用熊猫,而是使用if语句和列表?

Python 什么是按日期和时间过滤csv数据的方法,而不使用熊猫,而是使用if语句和列表?,python,csv,datetime,Python,Csv,Datetime,我有一整年的支持票。 第一列是票号,下一列是创建日期、员工姓名、主题、状态等。 日期以这种格式书写:2021年3月25日13:55 我知道如何在python中使用基本的列表和字典列表,以及基本的if语句,但我不知道如何制作一个只包含3月24日汇总的票证的列表。我可能想用更大的数据选择按月筛选,并列出2月份提交的所有门票,但我不知道如何筛选它们。 我不想用熊猫,因为那对我来说太混乱了,我是个初学者。 我可以用datetime来做这件事吗,或者其他方式 ''' ''' 您需要将日期转换为dateti

我有一整年的支持票。 第一列是票号,下一列是创建日期、员工姓名、主题、状态等。 日期以这种格式书写:2021年3月25日13:55
我知道如何在python中使用基本的列表和字典列表,以及基本的if语句,但我不知道如何制作一个只包含3月24日汇总的票证的列表。我可能想用更大的数据选择按月筛选,并列出2月份提交的所有门票,但我不知道如何筛选它们。 我不想用熊猫,因为那对我来说太混乱了,我是个初学者。 我可以用datetime来做这件事吗,或者其他方式

'''

'''

您需要将日期转换为datetime对象,然后可以使用月或日等属性进行筛选。我更喜欢自己使用列表理解。您在注释中提到的错误意味着它没有转换为datetime对象。 将日期时间导入为dt

jan = [dt.datetime.strptime(item[1], '%Y-%m-%d') for item in ticket_data if dt.datetime.strptime(item[1], '%m') == 1]

您需要将日期转换为datetime对象,然后可以使用月或日等属性进行筛选。我更喜欢自己使用列表理解。您在注释中提到的错误意味着它没有转换为datetime对象。 将日期时间导入为dt

jan = [dt.datetime.strptime(item[1], '%Y-%m-%d') for item in ticket_data if dt.datetime.strptime(item[1], '%m') == 1]

您已经将所有数据作为列表列表,并与标题分开,这是第一步。第二步是根据某种标准对数据进行排序/过滤

例如,假设您希望根据日期进行排序。当然,我们将使用python的内置函数(只要我们远离像pandas等库)。当您有复杂的数据时,通常需要向
排序
函数传递一个“key”函数,以便告诉它您希望如何对数据进行排序。在这种情况下,我们需要告诉它我们希望根据“date”列进行排序,因此我们需要告诉它排序值是每行的第二个元素,并且它应该将字符串转换为数字日期,然后可以将其作为数字进行比较(想想“key”函数用于接收任意数据,如csv的整行数据,并返回一个数字值进行排序。它不必严格地输出一个数字值,但如果输出了,通常会更容易,并且日期可以解释为数字。)

按“票号”排序会更容易,因为它已经是数字格式(尽管我们可能需要将其从字符串转换为字符串)

基于“源”列之类的条件选择数据可以通过多种方式完成,但我将展示一个示例,说明如何执行此操作

首先,我将通过制作一个字典来获取所有可能的“源”,该字典将为每个“源”类型(即行列表)提供条目。然后我将迭代所有行,并将每一行附加到适当的类别:

grouped_by_source = {}

for row in ticket_data:
    if row[8] in grouped_by_source: #8th column check if there's an entry yet we can append to
        grouped_by_source[row[8]].append(row)
    else:
        grouped_by_source[row[8]] = [row] #create a new list containing our row if it's the first from a given "source"

您已经将所有数据作为列表列表,并将其与标题分开,这是第一步。第二步是根据某种标准对数据进行排序/过滤

例如,假设您希望根据日期进行排序。当然,我们将使用python的内置函数(只要我们远离像pandas等库)。当您有复杂的数据时,通常需要向
排序
函数传递一个“key”函数,以便告诉它您希望如何对数据进行排序。在这种情况下,我们需要告诉它我们希望根据“date”列进行排序,因此我们需要告诉它排序值是每行的第二个元素,并且它应该将字符串转换为数字日期,然后可以将其作为数字进行比较(想想“key”函数用于接收任意数据,如csv的整行数据,并返回一个数字值进行排序。它不必严格地输出一个数字值,但如果输出了,通常会更容易,并且日期可以解释为数字。)

按“票号”排序会更容易,因为它已经是数字格式(尽管我们可能需要将其从字符串转换为字符串)

基于“源”列之类的条件选择数据可以通过多种方式完成,但我将展示一个示例,说明如何执行此操作

首先,我将通过制作一个字典来获取所有可能的“源”,该字典将为每个“源”类型(即行列表)提供条目。然后我将迭代所有行,并将每一行附加到适当的类别:

grouped_by_source = {}

for row in ticket_data:
    if row[8] in grouped_by_source: #8th column check if there's an entry yet we can append to
        grouped_by_source[row[8]].append(row)
    else:
        grouped_by_source[row[8]] = [row] #create a new list containing our row if it's the first from a given "source"

就是这个白痴干的!!看,伙计们!我学习了《熊猫入门教程》,并编辑了我想与之约会的专栏!现在我可以数数和分类了。庆祝结束后,我会去学怎么做。谢谢大家。


就是这个白痴干的!!看,伙计们!我学习了《熊猫入门教程》,并编辑了我想与之约会的专栏!现在我可以数数和分类了。庆祝结束后,我会去学怎么做。谢谢大家。

这看起来像是一个多问题的问题,你能把它简化一点吗?例如,您是否了解如何将
csv
读入并解析为
dict
?另外,在不知道数据外观的情况下,很难提出一个有用的解决方案-您能从中添加几行吗?您好。我用我的数据样本更新了我的问题。基本上,我们的票务系统仪表盘并没有显示我们老板希望看到的指标。上个月有多少张罚单,解决了多少问题等等。所以我希望用python编写一份每周报告,显示目标信息,而不给可怜的家伙提供他不想要的大量csv信息。除了@Aaron的答案,我认为这可能会为你澄清一些问题,确保基本知识正确。例如,如果打开文件,请将其关闭。别把它挂在那儿。更好的方法是,将
语句一起使用,请参见例如。如果你想挖得更深,就写吧
grouped_by_source = {}

for row in ticket_data:
    if row[8] in grouped_by_source: #8th column check if there's an entry yet we can append to
        grouped_by_source[row[8]].append(row)
    else:
        grouped_by_source[row[8]] = [row] #create a new list containing our row if it's the first from a given "source"