代码之家  ›  专栏  ›  技术社区  ›  Srinivas

熊猫检查日期是否为月初

  •  0
  • Srinivas  · 技术社区  · 5 年前

    我正在尝试这样做,获取数据帧日期,并检查日期是否为月初。如果是这样的话,留下它或交换日期中的日期和月份部分

        import pandas as pd
    dummy_data1 = {
            'id': ['1', '2', '3', '4', '5'],
            'Feature1': ['A', 'C', 'E', 'G', 'I'],
            'Feature2': ['B', 'D', 'F', 'H', 'J'],
            'dates': ['01/09/2020','10/01/2020','01/11/2020','01/12/2020','01/02/2021']}
    
    df1 = pd.DataFrame(dummy_data1, columns = ['id', 'Feature1', 'Feature2', 'dates'])
    
    df1
    

    当我尝试这个的时候,

        df2 = df1.assign(dates1=lambda df : pd.to_datetime(df.dates,format="%d/%m/%Y", errors="coerce")) \
    .assign(dates2=lambda d : "" if d['dates1'].dt.is_month_start == True else "1")
    

    我得到了这个错误

    ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
    

    当它尝试这个

        df2 = df1.assign(dates1=lambda df : pd.to_datetime(df.dates,format="%d/%m/%Y", errors="coerce")) \
    .assign(dates2=lambda d : "" if d['dates1'].dt.is_month_start is True else "1")
    

    在我的字典里我没有得到正确的答案。有人能告诉我如何检查日期是否是从一个月开始的吗。如果你能告诉我如何交换月份和日期,那就太好了。2020年1月10日应改为2020年10月1日

    1 回复  |  直到 5 年前
        1
  •  3
  •   Scott Boston    5 年前

    有一个 is_month_start pd的属性。日期时间索引:

    df1['dates'] = pd.to_datetime(df1['dates'])    
    df1['monthstart'] = df1['dates'].dt.is_month_start
    print(df1)
    

    输出:

      id Feature1 Feature2      dates  monthstart
    0  1        A        B 2020-01-09       False
    1  2        C        D 2020-10-01        True
    2  3        E        F 2020-01-11       False
    3  4        G        H 2020-01-12       False
    4  5        I        J 2021-01-02       False
    
        2
  •  2
  •   Elger    5 年前

    问题是,您正在比较lambda函数中的整个数据帧,这应该可以完成工作,并获得预期的输出:

    import pandas as pd
    
    dummy_data1 = {
        'id': ['1', '2', '3', '4', '5'],
        'Feature1': ['A', 'C', 'E', 'G', 'I'],
        'Feature2': ['B', 'D', 'F', 'H', 'J'],
        'dates': ['01/09/2020','10/01/2020','01/11/2020','01/12/2020','01/02/2021']}
    
    df1 = pd.DataFrame(dummy_data1, columns = ['id', 'Feature1', 'Feature2', 'dates'])
    
    df2['dates1'] = pd.to_datetime(df1['dates'])
    df2["dates2"] = ['' if x else "1" for x in df2['dates1'].dt.is_month_start]
    
    print(df2)