【问题标题】:Pandas check if date is month start熊猫检查日期是否是月份开始
【发布时间】:2021-10-25 01:11:23
【问题描述】:

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

    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 年 10 月 1 日应换成 2020 年 1 月 10 日

【问题讨论】:

  • 您是否真的需要在月初时使用 1 或 '' 的列,或者您只是想在不是月初时交换月日?
  • 最好将'dates' 转换为正确的日期时间格式。计算、绘图和方法依赖于 datetime dtype。

标签: python pandas


【解决方案1】:

pd.DateTimeIndex 有一个is_month_start 属性:

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】:

问题是您正在比较 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-07
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多