当前位置:   article > 正文

Python酷库之旅-第三方库Pandas(068)

Python酷库之旅-第三方库Pandas(068)

目录

一、用法精讲

271、pandas.Series.dt.dayofyear属性

271-1、语法

271-2、参数

271-3、功能

271-4、返回值

271-5、说明

271-6、用法

271-6-1、数据准备

271-6-2、代码示例

271-6-3、结果输出

272、pandas.Series.dt.days_in_month属性

272-1、语法

272-2、参数

272-3、功能

272-4、返回值

272-5、说明

272-6、用法

272-6-1、数据准备

272-6-2、代码示例

272-6-3、结果输出

273、pandas.Series.dt.quarter属性

273-1、语法

273-2、参数

273-3、功能

273-4、返回值

273-5、说明

273-6、用法

273-6-1、数据准备

273-6-2、代码示例

273-6-3、结果输出

274、pandas.Series.dt.is_month_start属性

274-1、语法

274-2、参数

274-3、功能

274-4、返回值

274-5、说明

274-6、用法

274-6-1、数据准备

274-6-2、代码示例

274-6-3、结果输出

275、pandas.Series.dt.is_month_end属性

275-1、语法

275-2、参数

275-3、功能

275-4、返回值

275-5、说明

275-6、用法

275-6-1、数据准备

275-6-2、代码示例

275-6-3、结果输出

二、推荐阅读

1、Python筑基之旅

2、Python函数之旅

3、Python算法之旅

4、Python魔法之旅

5、博客个人主页

一、用法精讲

271、pandas.Series.dt.dayofyear属性
271-1、语法
  1. # 271、pandas.Series.dt.dayofyear属性
  2. pandas.Series.dt.dayofyear
  3. The ordinal day of the year.
271-2、参数

        无

271-3、功能

        用于从日期时间序列中提取一年中的第几天,具备同样功能的还有pandas.Series.dt.day_of_year属性。

271-4、返回值

        返回一个整数,表示一年中的序数日期,范围从1(1月1日)到365(或者在闰年中为366)。

271-5、说明

        使用场景:

271-5-1、季节性分析:当你分析季节性趋势时,将日期转换为一年中的第几天有助于识别季节模式。比如,销售数据、气象数据和农业数据常常会受到季节性因素的影响。

271-5-2、时间序列分组:在进行时间序列数据分组时,例如按天数汇总数据,可以使用这个属性来将数据按年中的天数进行分组,便于进一步分析或可视化。

271-5-3、日期差异计算:在处理与日期相关的计算时,如计算两个日期之间的天数差异,使用这个属性可以帮助你将日期转换为易于比较的格式。

271-5-4、数据对齐和合并:当你需要将多个时间序列数据对齐或者合并时,使用这一属性可以帮助你在同一年中的相对位置对齐数据。

271-5-5、周期性特征工程:在机器学习建模时,将日期时间特征转换为一天中的第几天可以帮助模型学习周期性趋势,例如,预测天气或销售量。

271-6、用法
271-6-1、数据准备
271-6-2、代码示例
  1. # 271、pandas.Series.dt.dayofyear属性
  2. # 271-1、季节性分析
  3. import pandas as pd
  4. import numpy as np
  5. import matplotlib.pyplot as plt
  6. # 创建示例数据
  7. dates = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
  8. sales = np.random.rand(len(dates)) * 100
  9. data = pd.DataFrame({'Date': dates, 'Sales': sales})
  10. # 将日期转换为一年中的第几天
  11. data['DayOfYear'] = data['Date'].dt.dayofyear
  12. # 按天数汇总销售数据
  13. daily_sales = data.groupby('DayOfYear')['Sales'].mean()
  14. # 绘制季节性趋势图
  15. plt.figure(figsize=(12, 6))
  16. plt.plot(daily_sales.index, daily_sales.values)
  17. plt.title('Seasonal Trend of Sales Data')
  18. plt.xlabel('Day of Year')
  19. plt.ylabel('Average Sales')
  20. plt.grid(True)
  21. plt.show()
  22. # 271-2、时间序列分组
  23. import pandas as pd
  24. # 创建示例数据
  25. dates = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
  26. temperature = np.random.rand(len(dates)) * 30
  27. data = pd.DataFrame({'Date': dates, 'Temperature': temperature})
  28. # 将日期转换为一年中的第几天
  29. data['DayOfYear'] = data['Date'].dt.dayofyear
  30. # 按天数汇总温度数据
  31. daily_avg_temp = data.groupby('DayOfYear')['Temperature'].mean()
  32. print(daily_avg_temp.head(), end='\n\n')
  33. # 271-3、日期差异计算
  34. import pandas as pd
  35. # 创建示例日期
  36. date1 = pd.Timestamp('2024-03-01')
  37. date2 = pd.Timestamp('2024-08-15')
  38. # 计算日期差异
  39. day_of_year1 = date1.dayofyear
  40. day_of_year2 = date2.dayofyear
  41. days_difference = abs(day_of_year2 - day_of_year1)
  42. print(f'Days difference: {days_difference}', end='\n\n')
  43. # 271-4、数据对齐和合并
  44. import pandas as pd
  45. import numpy as np
  46. # 创建示例数据
  47. dates1 = pd.date_range(start='2024-01-01', end='2024-06-30', freq='D')
  48. data1 = pd.DataFrame({'Date': dates1, 'Value1': np.random.rand(len(dates1)) * 100})
  49. dates2 = pd.date_range(start='2024-07-01', end='2024-12-31', freq='D')
  50. data2 = pd.DataFrame({'Date': dates2, 'Value2': np.random.rand(len(dates2)) * 100})
  51. # 将日期转换为一年中的第几天
  52. data1['DayOfYear'] = data1['Date'].dt.dayofyear
  53. data2['DayOfYear'] = data2['Date'].dt.dayofyear
  54. # 合并数据
  55. merged_data = pd.merge(data1[['DayOfYear', 'Value1']], data2[['DayOfYear', 'Value2']], on='DayOfYear', how='outer')
  56. print(merged_data.head(), end='\n\n')
  57. # 271-5、周期性特征工程
  58. import pandas as pd
  59. import numpy as np
  60. # 创建示例数据
  61. dates = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
  62. sales = np.random.rand(len(dates)) * 100
  63. data = pd.DataFrame({'Date': dates, 'Sales': sales})
  64. # 将日期转换为一年中的第几天
  65. data['DayOfYear'] = data['Date'].dt.dayofyear
  66. # 将 DayOfYear 转换为周期性特征(例如正弦和余弦)
  67. data['DayOfYear_Sin'] = np.sin(2 * np.pi * data['DayOfYear'] / 365)
  68. data['DayOfYear_Cos'] = np.cos(2 * np.pi * data['DayOfYear'] / 365)
  69. print(data[['Date', 'DayOfYear', 'DayOfYear_Sin', 'DayOfYear_Cos']].head())
271-6-3、结果输出
  1. # 271、pandas.Series.dt.dayofyear属性
  2. # 271-1、季节性分析
  3. # 见图1
  4. # 271-2、时间序列分组
  5. # DayOfYear
  6. # 1 4.654971
  7. # 2 22.423349
  8. # 3 16.145457
  9. # 4 16.341184
  10. # 5 23.362987
  11. # Name: Temperature, dtype: float64
  12. # 271-3、日期差异计算
  13. # Days difference: 167
  14. # 271-4、数据对齐和合并
  15. # DayOfYear Value1 Value2
  16. # 0 1 61.680196 NaN
  17. # 1 2 40.421598 NaN
  18. # 2 3 2.239969 NaN
  19. # 3 4 17.233058 NaN
  20. # 4 5 34.516007 NaN
  21. # 271-5、周期性特征工程
  22. # Date DayOfYear DayOfYear_Sin DayOfYear_Cos
  23. # 0 2024-01-01 1 0.017213 0.999852
  24. # 1 2024-01-02 2 0.034422 0.999407
  25. # 2 2024-01-03 3 0.051620 0.998667
  26. # 3 2024-01-04 4 0.068802 0.997630
  27. # 4 2024-01-05 5 0.085965 0.996298

图1:

272、pandas.Series.dt.days_in_month属性
272-1、语法
  1. # 272、pandas.Series.dt.days_in_month属性
  2. pandas.Series.dt.days_in_month
  3. The number of days in the month.
272-2、参数

        无

272-3、功能

        用于处理日期时间数据的属性,它能够返回每个日期所在月份的天数。

272-4、返回值

        返回一个整数类型的Series,其中每个元素代表对应日期所在月份的天数。

272-5、说明

        使用场景:

272-5-1、财务分析:在财务分析中,特别是在处理月度财务报表时,了解每个月的天数是很重要的。例如,计算每月的销售额时,知道每个月有多少天可以帮助计算日均销售额或调整财务预测模型。

272-5-2、时间序列数据处理:在处理时间序列数据时,某些统计计算可能需要考虑月份的天数。例如,计算某个月的平均气温或降水量时,需要调整数据以反映该月的实际天数。

272-5-3、数据清理和验证:在数据清理过程中,可能需要检查日期数据的一致性。比如,确保生成的时间序列数据不会错误地包含不符合月份天数的日期。

272-5-4、统计分析:在进行统计分析时,了解每个月的天数有助于进行更加精确的统计计算。比如,在计算每个月的事件发生频率时,知道每个月的天数可以帮助标准化数据。

272-5-5、时间特征工程:在构建机器学习模型时,将月份的天数作为特征之一,可能对模型性能产生积极的影响。例如,在预测能源消耗或交通流量时,每个月的天数可能会影响预测结果。

272-6、用法
272-6-1、数据准备
272-6-2、代码示例
  1. # 272、pandas.Series.dt.days_in_month属性
  2. # 272-1、财务分析
  3. import pandas as pd
  4. # 创建示例数据
  5. data = {
  6. 'date': pd.date_range(start='2024-01-01', periods=90, freq='D'),
  7. 'sales': [100 + i for i in range(90)] # 假设每天的销售额逐渐增加
  8. }
  9. df = pd.DataFrame(data)
  10. # 计算每个月的总销售额
  11. df['month'] = df['date'].dt.to_period('M')
  12. monthly_sales = df.groupby('month')['sales'].sum()
  13. # 获取每个月的天数
  14. days_in_month = df['date'].dt.days_in_month.groupby(df['date'].dt.to_period('M')).first()
  15. # 计算日均销售额
  16. daily_avg_sales = monthly_sales / days_in_month
  17. print(daily_avg_sales, end='\n\n')
  18. # 272-2、时间序列数据处理
  19. import pandas as pd
  20. import numpy as np
  21. # 创建示例气温数据
  22. np.random.seed(0)
  23. dates = pd.date_range(start='2024-01-01', periods=90, freq='D')
  24. temperatures = np.random.normal(loc=20, scale=5, size=len(dates)) # 随机生成气温数据
  25. df = pd.DataFrame({'date': dates, 'temperature': temperatures})
  26. # 计算每个月的总气温
  27. df['month'] = df['date'].dt.to_period('M')
  28. monthly_temp_sum = df.groupby('month')['temperature'].sum()
  29. # 获取每个月的天数
  30. days_in_month = df['date'].dt.days_in_month.groupby(df['date'].dt.to_period('M')).first()
  31. # 计算月均气温
  32. monthly_avg_temp = monthly_temp_sum / days_in_month
  33. print(monthly_avg_temp, end='\n\n')
  34. # 272-3、数据清理和验证
  35. import pandas as pd
  36. # 创建包含日期的示例数据
  37. dates = pd.Series(pd.to_datetime(['2024-01-31', '2024-02-30', '2024-03-15', '2024-04-31'], errors='coerce'))
  38. # 检查每个日期是否在该月有效
  39. valid_dates = dates[dates.dt.day <= dates.dt.days_in_month]
  40. # 打印有效日期
  41. print("有效日期:")
  42. print(valid_dates.dt.strftime('%Y-%m-%d'), end='\n\n')
  43. # 272-4、统计分析
  44. import pandas as pd
  45. # 创建示例事件数据
  46. data = {
  47. 'date': pd.date_range(start='2024-01-01', periods=90, freq='D'),
  48. 'event_occurred': np.random.choice([0, 1], size=90) # 随机事件发生(0或1)
  49. }
  50. df = pd.DataFrame(data)
  51. # 计算每个月的事件发生总数
  52. df['month'] = df['date'].dt.to_period('M')
  53. monthly_event_count = df.groupby('month')['event_occurred'].sum()
  54. # 获取每个月的天数
  55. days_in_month = df['date'].dt.days_in_month.groupby(df['date'].dt.to_period('M')).first()
  56. # 计算事件发生频率
  57. event_frequency = monthly_event_count / days_in_month
  58. print(event_frequency, end='\n\n')
  59. # 272-5、时间特征工程
  60. import pandas as pd
  61. # 创建示例数据集
  62. data = {
  63. 'date': pd.date_range(start='2024-01-01', periods=90, freq='D'),
  64. 'feature_1': np.random.rand(90), # 随机特征
  65. }
  66. df = pd.DataFrame(data)
  67. # 添加月份的天数作为特征
  68. df['days_in_month'] = df['date'].dt.days_in_month
  69. print(df.head())
272-6-3、结果输出
  1. # 272、pandas.Series.dt.days_in_month属性
  2. # 272-1、财务分析
  3. # month
  4. # 2024-01 115.000000
  5. # 2024-02 145.000000
  6. # 2024-03 168.870968
  7. # Freq: M, dtype: float64
  8. # 272-2、时间序列数据处理
  9. # month
  10. # 2024-01 22.167845
  11. # 2024-02 18.475758
  12. # 2024-03 18.707802
  13. # Freq: M, dtype: float64
  14. # 272-3、数据清理和验证
  15. # 有效日期:
  16. # 0 2024-01-31
  17. # 2 2024-03-15
  18. # dtype: object
  19. # 272-4、统计分析
  20. # month
  21. # 2024-01 0.612903
  22. # 2024-02 0.482759
  23. # 2024-03 0.645161
  24. # Freq: M, dtype: float64
  25. # 272-5、时间特征工程
  26. # date feature_1 days_in_month
  27. # 0 2024-01-01 0.069167 31
  28. # 1 2024-01-02 0.697429 31
  29. # 2 2024-01-03 0.453543 31
  30. # 3 2024-01-04 0.722056 31
  31. # 4 2024-01-05 0.866382 31
273、pandas.Series.dt.quarter属性
273-1、语法
  1. # 273、pandas.Series.dt.quarter属性
  2. pandas.Series.dt.quarter
  3. The quarter of the date.
273-2、参数

        无

273-3、功能

        用于从日期时间序列中提取每个日期所在的季度。

273-4、返回值

        一个整数序列,每个整数表示对应日期的季度,具体来说:

  • 1表示第一季度(1月到3月)
  • 2表示第二季度(4月到6月)
  • 3表示第三季度(7月到9月)
  • 4表示第四季度(10月到12月)
273-5、说明

        使用场景:

273-5-1、财务分析:企业通常按季度发布财务报告,使用该属性可以帮助分析不同季度的收入、支出和利润等数据,以便识别季节性趋势。

273-5-2、销售数据分析:零售商可以利用该属性来评估每个季度的销售表现,从而制定更有效的营销策略和库存管理计划。

273-5-3、季节性趋势研究:在经济学和社会学研究中,分析特定季度的数据(如消费者支出、旅游业活动等)可以帮助研究季节性变化的影响。

273-5-4、预算和预测:企业可以基于历史季度数据来制定预算和未来的财务预测,以便更好地规划资源分配。

273-5-5、业绩评估:公司可以通过比较不同季度的关键绩效指标(KPI)来评估业务的增长和表现。

273-5-6、时间序列可视化:在数据可视化中,将数据按季度分组可以使图表更加清晰,便于观察季度间的变化。

273-5-7、数据聚合:在处理大规模时间序列数据时,可以根据季度进行数据聚合,以便进行更高层次的分析,例如计算每个季度的平均值、总和等。

273-6、用法
273-6-1、数据准备
273-6-2、代码示例
  1. # 273、pandas.Series.dt.quarter属性
  2. # 273-1、财务分析
  3. import pandas as pd
  4. # 创建示例数据
  5. data = {
  6. 'date': pd.date_range(start='2023-01-01', periods=12, freq='ME'),
  7. 'revenue': [1000, 1200, 1100, 1500, 1600, 1700, 1800, 2000, 2100, 2200, 2300, 2400]
  8. }
  9. df = pd.DataFrame(data)
  10. # 添加季度列
  11. df['quarter'] = df['date'].dt.quarter
  12. # 按季度分组并计算总收入
  13. quarterly_revenue = df.groupby('quarter')['revenue'].sum().reset_index()
  14. print(quarterly_revenue, end='\n\n')
  15. # 273-2、销售数据分析
  16. import pandas as pd
  17. # 创建示例数据
  18. sales_data = {
  19. 'date': pd.date_range(start='2023-01-01', periods=12, freq='ME'),
  20. 'sales': [500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600]
  21. }
  22. sales_df = pd.DataFrame(sales_data)
  23. # 添加季度列
  24. sales_df['quarter'] = sales_df['date'].dt.quarter
  25. # 按季度分组并计算总销售额
  26. quarterly_sales = sales_df.groupby('quarter')['sales'].sum().reset_index()
  27. print(quarterly_sales, end='\n\n')
  28. # 273-3、季节性趋势研究
  29. import pandas as pd
  30. # 创建示例数据
  31. consumer_spending = {
  32. 'date': pd.date_range(start='2023-01-01', periods=12, freq='ME'),
  33. 'spending': [300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850]
  34. }
  35. spending_df = pd.DataFrame(consumer_spending)
  36. # 添加季度列
  37. spending_df['quarter'] = spending_df['date'].dt.quarter
  38. # 按季度分组并计算总消费支出
  39. quarterly_spending = spending_df.groupby('quarter')['spending'].sum().reset_index()
  40. print(quarterly_spending, end='\n\n')
  41. # 273-4、预算和预测
  42. import pandas as pd
  43. # 创建示例数据
  44. budget_data = {
  45. 'date': pd.date_range(start='2023-01-01', periods=12, freq='ME'),
  46. 'budget': [10000, 12000, 11000, 15000, 16000, 17000, 18000, 20000, 21000, 22000, 23000, 24000]
  47. }
  48. budget_df = pd.DataFrame(budget_data)
  49. # 添加季度列
  50. budget_df['quarter'] = budget_df['date'].dt.quarter
  51. # 按季度分组并计算总预算
  52. quarterly_budget = budget_df.groupby('quarter')['budget'].sum().reset_index()
  53. print(quarterly_budget, end='\n\n')
  54. # 273-5、数据聚合
  55. import pandas as pd
  56. # 创建示例数据
  57. large_data = {
  58. 'date': pd.date_range(start='2023-01-01', periods=24, freq='ME'),
  59. 'value': range(24)
  60. }
  61. large_df = pd.DataFrame(large_data)
  62. # 添加季度列
  63. large_df['quarter'] = large_df['date'].dt.quarter
  64. # 按季度分组并计算每个季度的平均值
  65. quarterly_aggregate = large_df.groupby('quarter')['value'].mean().reset_index()
  66. print(quarterly_aggregate, end='\n\n')
  67. # 273-6、季度数据可视化
  68. import pandas as pd
  69. import matplotlib.pyplot as plt
  70. import matplotlib
  71. # 配置字体,确保中文字符正常显示
  72. matplotlib.rcParams['font.sans-serif'] = ['Microsoft YaHei']
  73. # 创建示例数据
  74. data = {
  75. 'date': pd.date_range(start='2023-01-01', periods=12, freq='ME'),
  76. 'revenue': [1000, 1200, 1100, 1500, 1600, 1700, 1800, 2000, 2100, 2200, 2300, 2400]
  77. }
  78. df = pd.DataFrame(data)
  79. # 添加季度列
  80. df['quarter'] = df['date'].dt.quarter
  81. # 按季度分组并计算总收入
  82. quarterly_revenue = df.groupby('quarter')['revenue'].sum().reset_index()
  83. # 可视化
  84. plt.figure(figsize=(8, 5))
  85. plt.bar(quarterly_revenue['quarter'], quarterly_revenue['revenue'], color='skyblue')
  86. plt.xlabel('季度')
  87. plt.ylabel('总收入')
  88. plt.title('各季度总收入')
  89. plt.xticks(quarterly_revenue['quarter'])
  90. plt.show()
  91. # 273-7、季度同比分析
  92. import pandas as pd
  93. # 创建示例数据(跨年度)
  94. data = {
  95. 'date': pd.date_range(start='2022-01-01', periods=24, freq='ME'),
  96. 'revenue': [1000, 1200, 1100, 1500, 1600, 1700,
  97. 1800, 2000, 2100, 2200, 2300, 2400,
  98. 1300, 1400, 1350, 1550, 1650, 1750,
  99. 1850, 2050, 2150, 2250, 2350, 2450]
  100. }
  101. df = pd.DataFrame(data)
  102. # 添加年份和季度列
  103. df['year'] = df['date'].dt.year
  104. df['quarter'] = df['date'].dt.quarter
  105. # 按年份和季度分组并计算总收入
  106. quarterly_revenue = df.groupby(['year', 'quarter'])['revenue'].sum().reset_index()
  107. # 创建一个新的列来计算同比
  108. quarterly_revenue['previous_year_revenue'] = quarterly_revenue.groupby('quarter')['revenue'].shift(1)
  109. quarterly_revenue['year_on_year_growth'] = (quarterly_revenue['revenue'] - quarterly_revenue['previous_year_revenue']) / quarterly_revenue['previous_year_revenue'] * 100
  110. print(quarterly_revenue, end='\n\n')
  111. # 273-8、季度预测模型
  112. import pandas as pd
  113. from sklearn.linear_model import LinearRegression
  114. import numpy as np
  115. # 创建示例数据(只使用过去的季度数据)
  116. data = {
  117. 'date': pd.date_range(start='2023-01-01', periods=12, freq='ME'),
  118. 'revenue': [1000, 1200, 1100, 1500, 1600, 1700,
  119. 1800, 2000, 2100, 2200, 2300, 2400]
  120. }
  121. df = pd.DataFrame(data)
  122. # 添加季度列
  123. df['quarter'] = df['date'].dt.quarter
  124. # 准备训练数据
  125. X = np.array(df['quarter']).reshape(-1, 1) # 特征变量
  126. y = np.array(df['revenue']) # 标签变量
  127. # 创建线性回归模型并训练
  128. model = LinearRegression()
  129. model.fit(X, y)
  130. # 预测未来4个季度的收入
  131. future_quarters = np.array([1, 2, 3, 4]).reshape(-1, 1)
  132. predicted_revenue = model.predict(future_quarters)
  133. print("未来4个季度的预测收入:", [f"{revenue:.2f}" for revenue in predicted_revenue])
273-6-3、结果输出
  1. # 273、pandas.Series.dt.quarter属性
  2. # 273-1、财务分析
  3. # quarter revenue
  4. # 0 1 3300
  5. # 1 2 4800
  6. # 2 3 5900
  7. # 3 4 6900
  8. # 273-2、销售数据分析
  9. # quarter sales
  10. # 0 1 1800
  11. # 1 2 2700
  12. # 2 3 3600
  13. # 3 4 4500
  14. # 273-3、季节性趋势研究
  15. # quarter spending
  16. # 0 1 1050
  17. # 1 2 1500
  18. # 2 3 1950
  19. # 3 4 2400
  20. # 273-4、预算和预测
  21. # quarter budget
  22. # 0 1 33000
  23. # 1 2 48000
  24. # 2 3 59000
  25. # 3 4 69000
  26. # 273-5、数据聚合
  27. # quarter value
  28. # 0 1 7.0
  29. # 1 2 10.0
  30. # 2 3 13.0
  31. # 3 4 16.0
  32. # 273-6、季度数据可视化
  33. # 见图2
  34. # 273-7、季度同比分析
  35. # year quarter revenue previous_year_revenue year_on_year_growth
  36. # 0 2022 1 3300 NaN NaN
  37. # 1 2022 2 4800 NaN NaN
  38. # 2 2022 3 5900 NaN NaN
  39. # 3 2022 4 6900 NaN NaN
  40. # 4 2023 1 4050 3300.0 22.727273
  41. # 5 2023 2 4950 4800.0 3.125000
  42. # 6 2023 3 6050 5900.0 2.542373
  43. # 7 2023 4 7050 6900.0 2.173913
  44. # 273-8、季度预测模型
  45. # 未来4个季度的预测收入: ['1146.67', '1543.33', '1940.00', '2336.67']

图2:

274、pandas.Series.dt.is_month_start属性
274-1、语法
  1. # 274、pandas.Series.dt.is_month_start属性
  2. pandas.Series.dt.is_month_start
  3. Indicates whether the date is the first day of the month.
  4. Returns:
  5. Series or array
  6. For Series, returns a Series with boolean values. For DatetimeIndex, returns a boolean array.
274-2、参数

        无

274-3、功能

        用于检查日期是否是每个月的第一天的属性。

274-4、返回值

        返回一个布尔型的Series,对于每个日期,如果该日期是一个月的第一天,则对应位置为True,否则为False

274-5、说明

        使用场景:

274-5-1、财务报表分析:在财务数据中,通常需要根据每个月的开始日期进行数据汇总或分析,使用该属性可以快速筛选出每个月的第一天,以便进行月度报表生成。

274-5-2、时间序列数据处理:在分析时间序列数据时,可能需要对每个月的第一天进行特定操作,例如计算每月的平均值或总和。

274-5-3、事件触发:如果系统中有基于日期触发的事件,比如每月第一天发送通知或执行某项任务,可以利用该属性来确定何时触发这些事件。

274-5-4、数据清洗:在处理数据集时,可能需要删除或标记不是每月第一天的数据,该属性可以帮助快速识别并进行相应的清理。

274-5-5、可视化分析:在制作时间序列图表时,标记每个月的第一天可以帮助更清晰地展示数据的变化趋势。

274-5-6、生成周期性报告:许多业务流程要求按月生成报告,使用该属性,可以轻松选择每个月的开始日期,以便从数据库中提取相应的数据。

274-6、用法
274-6-1、数据准备
274-6-2、代码示例
  1. # 274、pandas.Series.dt.is_month_start属性
  2. # 274-1、财务报表分析
  3. import pandas as pd
  4. # 创建一个示例数据集
  5. data = {
  6. 'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
  7. 'amount': range(60)
  8. }
  9. df = pd.DataFrame(data)
  10. # 标记每个月的第一天
  11. df['is_month_start'] = df['date'].dt.is_month_start
  12. # 筛选出每个月的第一天数据
  13. month_start_data = df[df['is_month_start']]
  14. print(month_start_data, end='\n\n')
  15. # 274-2、时间序列数据处理
  16. import pandas as pd
  17. # 创建一个示例数据集
  18. data = {
  19. 'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
  20. 'value': range(60)
  21. }
  22. df = pd.DataFrame(data)
  23. # 标记每个月的第一天
  24. df['is_month_start'] = df['date'].dt.is_month_start
  25. # 筛选出每个月的第一天数据
  26. month_start_df = df[df['is_month_start']]
  27. # 计算每个月的平均值
  28. monthly_avg = month_start_df.resample('ME', on='date').mean()
  29. print(monthly_avg, end='\n\n')
  30. # 274-3、事件触发
  31. import pandas as pd
  32. # 创建一个示例数据集
  33. data = {
  34. 'date': pd.date_range(start='2024-01-01', periods=60, freq='D')
  35. }
  36. df = pd.DataFrame(data)
  37. # 标记每个月的第一天
  38. df['is_month_start'] = df['date'].dt.is_month_start
  39. # 触发事件的日期
  40. events = df[df['is_month_start']]
  41. for date in events['date']:
  42. print(f"Trigger event on: {date}")
  43. # 274-4、数据清洗
  44. import pandas as pd
  45. # 创建一个示例数据集
  46. data = {
  47. 'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
  48. 'value': range(60)
  49. }
  50. df = pd.DataFrame(data)
  51. # 标记每个月的第一天
  52. df['is_month_start'] = df['date'].dt.is_month_start
  53. # 清理数据,只保留每个月第一天的数据
  54. cleaned_df = df[df['is_month_start']]
  55. print(cleaned_df, end='\n\n')
  56. # 274-5、可视化分析
  57. import pandas as pd
  58. import matplotlib.pyplot as plt
  59. # 创建一个示例数据集
  60. data = {
  61. 'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
  62. 'value': range(60)
  63. }
  64. df = pd.DataFrame(data)
  65. # 标记每个月的第一天
  66. df['is_month_start'] = df['date'].dt.is_month_start
  67. # 绘制时间序列图
  68. plt.figure(figsize=(12, 6))
  69. plt.plot(df['date'], df['value'], label='Value')
  70. plt.scatter(df[df['is_month_start']]['date'],
  71. df[df['is_month_start']]['value'],
  72. color='red',
  73. label='Month Start',
  74. marker='o')
  75. plt.xlabel('Date')
  76. plt.ylabel('Value')
  77. plt.title('Time Series with Month Start Marked')
  78. plt.legend()
  79. plt.grid(True)
  80. plt.show()
  81. # 274-6、生成周期性报告
  82. import pandas as pd
  83. # 创建一个示例数据集
  84. data = {
  85. 'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
  86. 'sales': range(60)
  87. }
  88. df = pd.DataFrame(data)
  89. # 标记每个月的第一天
  90. df['is_month_start'] = df['date'].dt.is_month_start
  91. # 按月份生成报告
  92. monthly_report = df[df['is_month_start']].set_index('date').resample('ME').sum()
  93. print(monthly_report)
274-6-3、结果输出
  1. # 274、pandas.Series.dt.is_month_start属性
  2. # 274-1、财务报表分析
  3. # date amount is_month_start
  4. # 0 2024-01-01 0 True
  5. # 31 2024-02-01 31 True
  6. # 274-2、时间序列数据处理
  7. # value is_month_start
  8. # date
  9. # 2024-01-31 0.0 1.0
  10. # 2024-02-29 31.0 1.0
  11. # 274-3、事件触发
  12. # Trigger event on: 2024-01-01 00:00:00
  13. # Trigger event on: 2024-02-01 00:00:00
  14. # 274-4、数据清洗
  15. # date value is_month_start
  16. # 0 2024-01-01 0 True
  17. # 31 2024-02-01 31 True
  18. # 274-5、可视化分析
  19. # 见图3
  20. # 274-6、生成周期性报告
  21. # sales is_month_start
  22. # date
  23. # 2024-01-31 0 1
  24. # 2024-02-29 31 1

图3:

275、pandas.Series.dt.is_month_end属性
275-1、语法
  1. # 275、pandas.Series.dt.is_month_end属性
  2. pandas.Series.dt.is_month_end
  3. Indicates whether the date is the last day of the month.
  4. Returns:
  5. Series or array
  6. For Series, returns a Series with boolean values. For DatetimeIndex, returns a boolean array.
275-2、参数

        无

275-3、功能

        用于处理日期数据的属性,它可以判断每个日期是否是该月的最后一天。

275-4、返回值

        返回一个布尔值Series,如果日期是月份的最后一天,则对应位置的值为True;否则为False。

275-5、说明

        使用场景:

275-5-1、数据筛选:当我们需要从一个时间序列中提取每个月的最后一天时,该属性可以非常方便地实现这一点。例如,我们可能只想分析每个月最后一天的数据。

275-5-2、统计分析:很多业务场景需要在月末进行数据的统计和汇总,比如计算每个月最后一天的库存量、销售额等。

275-5-3、数据可视化:在数据可视化时,强调每个月的最后一天可以帮助更清晰地展示数据的变化趋势,可以使用该属性来标记图中的月末日期。

275-5-4、数据校验:在数据处理中,有时需要确保每个月的数据都有完整的月末记录,可以使用该属性来验证数据中是否缺少某个月的月末记录。

275-5-5、财务报表分析:在财务分析中,通常需要月末的数据进行结算和报告。例如,生成月末的资产负债表或损益表。

275-6、用法
275-6-1、数据准备
275-6-2、代码示例
  1. # 275、pandas.Series.dt.is_month_end属性
  2. # 275-1、数据筛选
  3. import pandas as pd
  4. # 创建一个包含日期的 Series
  5. dates = pd.Series(pd.date_range(start='2024-01-01', periods=60, freq='D'))
  6. # 筛选出每个月的最后一天
  7. month_end_dates = dates[dates.dt.is_month_end]
  8. print(month_end_dates, end='\n\n')
  9. # 275-2、统计分析
  10. import pandas as pd
  11. import numpy as np
  12. # 假设我们有一个包含销售数据的DataFrame
  13. data = pd.DataFrame({
  14. 'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
  15. 'sales': np.random.randint(100, 200, size=60)
  16. })
  17. # 计算每个月最后一天的销售额
  18. month_end_sales = data[data['date'].dt.is_month_end]
  19. print(month_end_sales, end='\n\n')
  20. # 275-3、数据可视化
  21. import pandas as pd
  22. import numpy as np
  23. import matplotlib.pyplot as plt
  24. # 生成随机销售数据
  25. data = pd.DataFrame({
  26. 'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
  27. 'sales': np.random.randint(100, 200, size=60)
  28. })
  29. # 标记每个月的最后一天
  30. data['is_month_end'] = data['date'].dt.is_month_end
  31. # 绘制时间序列图
  32. plt.figure(figsize=(10, 6))
  33. plt.plot(data['date'], data['sales'], label='Daily Sales')
  34. plt.scatter(data[data['is_month_end']]['date'], data[data['is_month_end']]['sales'], color='red', label='Month End Sales')
  35. plt.xlabel('Date')
  36. plt.ylabel('Sales')
  37. plt.title('Daily Sales with Month End Highlights')
  38. plt.legend()
  39. plt.show()
  40. # 275-4、数据校验
  41. import pandas as pd
  42. # 创建一个日期范围
  43. date_range = pd.date_range(start='2024-01-01', periods=60, freq='D')
  44. # 检查每个月是否有月末记录
  45. month_end_dates = date_range[date_range.is_month_end]
  46. missing_month_end = pd.date_range(start='2024-01-01', periods=3, freq='ME').difference(month_end_dates)
  47. print(f"缺少的月末日期: {missing_month_end}", end='\n\n')
  48. # 275-5、财务报表分析
  49. import pandas as pd
  50. import numpy as np
  51. # 假设我们有一个包含财务数据的DataFrame
  52. financial_data = pd.DataFrame({
  53. 'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
  54. 'balance': np.random.randint(10000, 20000, size=60)
  55. })
  56. # 提取每个月的月末财务数据
  57. month_end_financials = financial_data[financial_data['date'].dt.is_month_end]
  58. print(month_end_financials)
275-6-3、结果输出
  1. # 275、pandas.Series.dt.is_month_end属性
  2. # 275-1、数据筛选
  3. # 30 2024-01-31
  4. # 59 2024-02-29
  5. # dtype: datetime64[ns]
  6. # 275-2、统计分析
  7. # date sales
  8. # 30 2024-01-31 127
  9. # 59 2024-02-29 170
  10. # 275-3、数据可视化
  11. # 见图3
  12. # 275-4、数据校验
  13. # 缺少的月末日期: DatetimeIndex(['2024-03-31'], dtype='datetime64[ns]', freq='ME')
  14. # 275-5、财务报表分析
  15. # date balance
  16. # 30 2024-01-31 13937
  17. # 59 2024-02-29 19661

图4:

二、推荐阅读

1、Python筑基之旅
2、Python函数之旅
3、Python算法之旅
4、Python魔法之旅
5、博客个人主页
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/957875
推荐阅读
相关标签
  

闽ICP备14008679号