开发者社区> 问答> 正文

如何在CSV中遍历列以查找哪些列包含Python中的日期行(熊猫)

我有几个CSV文件需要使用panda在python3中读取。我试图找到每个CSV的哪一列(或索引)包含有日期的列。两个问题: 我已经开始使用类似这样的panda对它们进行迭代,并且我可以使用datetime解析函数快速识别列中是否包含日期。我很难一列一列地(通过每个标题来检查“日期”之类的词),也很难通过那一列中的每一行来查看是否可以将它解析为一个日期。想法吗? 例如CSV:

Table
DATE ,TOPIC 
Aug 21 ,"Some text here"
Aug 23 ,Some other text here, it isn't always in quotes 

当前的代码迭代通过行:

import pandas as pd

df = pd.read_csv(filePath)

for i, row in enumerate(df.itertuples(), 0):
   print(i, row.Index)

编辑: 下面是我当前的代码,用于遍历文件索引列中的每一行。当日期在索引中时,这是有效的,但是我需要遍历每一列(不仅仅是索引)来查看哪一列包含日期。

for i, row in enumerate(df.itertuples(), 0):
   for keyword in dateKeywords:
       if keyword.lower() in row.Index.lower():
           foundColumn = True

       if foundColumn:
           for days in dayAndMonthList: 
                if days in row.Index:
                     canParse = is_date(row.Index)
                     print(canParse)

上面的代码循环遍历Dataframe,并查找“date”或“week”之类的关键字,以查看潜在的日期列。如果它找到了一个,那么它将检查该列中的行是否都包含一个月的名称(或缩写)。这可以解析索引列中的日期,但是如何才能使它转换并测试每个列的关键字,然后遍历该列中的行以检查它们是否可解析呢? 问题来源StackOverflow 地址:/questions/59379781/how-to-iterate-over-columns-in-csv-to-find-which-one-contains-rows-of-dates-in-p

展开
收起
kun坤 2019-12-29 21:48:16 944 0
1 条回答
写回答
取消 提交回答
  • 检索索引/列对,其中引用的单元格包含数据流中的日期:

    # random setup
    import pandas as pd
    from dateutil.parser import parse
    df = pd.DataFrame({
        "DATE": ['15/05/1965', '02/15/1994', 'Aug 23'],
        "MIX": ['ABC', 'DEF', '02/05/1995'],
        "TRICKERY": ['some chars', 'obfuscating 12/12/2000 the date', 'more chars'],
        "NAT": ['not', 'at', 'all']
    })
    
    # solution
    def get_date(s):
        try:
            parse(s, fuzzy=True)
            return True
        except ValueError:
            return False
    
    # get a boolean dataframe with True values indicating a cell is a date
    df = df.applymap(get_date)
    
    # get a list of tuples containing an index and a column name
    parsable = df[df].stack().index.tolist()
    
    >>> df
       DATE    MIX    NAT  TRICKERY
    0  True  False  False     False
    1  True  False  False      True
    2  True   True  False     False
    
    >>> parsable
    [(0, 'DATE'), (1, 'DATE'), (1, 'TRICKERY'), (2, 'DATE'), (2, 'MIX')]
    
    
    2019-12-29 21:48:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载