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

news2024/11/16 11:30:29

目录

一、用法精讲

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、语法
# 271、pandas.Series.dt.dayofyear属性
pandas.Series.dt.dayofyear
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、代码示例
# 271、pandas.Series.dt.dayofyear属性
# 271-1、季节性分析
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 创建示例数据
dates = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
sales = np.random.rand(len(dates)) * 100
data = pd.DataFrame({'Date': dates, 'Sales': sales})
# 将日期转换为一年中的第几天
data['DayOfYear'] = data['Date'].dt.dayofyear
# 按天数汇总销售数据
daily_sales = data.groupby('DayOfYear')['Sales'].mean()
# 绘制季节性趋势图
plt.figure(figsize=(12, 6))
plt.plot(daily_sales.index, daily_sales.values)
plt.title('Seasonal Trend of Sales Data')
plt.xlabel('Day of Year')
plt.ylabel('Average Sales')
plt.grid(True)
plt.show()

# 271-2、时间序列分组
import pandas as pd
# 创建示例数据
dates = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
temperature = np.random.rand(len(dates)) * 30
data = pd.DataFrame({'Date': dates, 'Temperature': temperature})
# 将日期转换为一年中的第几天
data['DayOfYear'] = data['Date'].dt.dayofyear
# 按天数汇总温度数据
daily_avg_temp = data.groupby('DayOfYear')['Temperature'].mean()
print(daily_avg_temp.head(), end='\n\n')

# 271-3、日期差异计算
import pandas as pd
# 创建示例日期
date1 = pd.Timestamp('2024-03-01')
date2 = pd.Timestamp('2024-08-15')
# 计算日期差异
day_of_year1 = date1.dayofyear
day_of_year2 = date2.dayofyear
days_difference = abs(day_of_year2 - day_of_year1)
print(f'Days difference: {days_difference}', end='\n\n')

# 271-4、数据对齐和合并
import pandas as pd
import numpy as np
# 创建示例数据
dates1 = pd.date_range(start='2024-01-01', end='2024-06-30', freq='D')
data1 = pd.DataFrame({'Date': dates1, 'Value1': np.random.rand(len(dates1)) * 100})
dates2 = pd.date_range(start='2024-07-01', end='2024-12-31', freq='D')
data2 = pd.DataFrame({'Date': dates2, 'Value2': np.random.rand(len(dates2)) * 100})
# 将日期转换为一年中的第几天
data1['DayOfYear'] = data1['Date'].dt.dayofyear
data2['DayOfYear'] = data2['Date'].dt.dayofyear
# 合并数据
merged_data = pd.merge(data1[['DayOfYear', 'Value1']], data2[['DayOfYear', 'Value2']], on='DayOfYear', how='outer')
print(merged_data.head(), end='\n\n')

# 271-5、周期性特征工程
import pandas as pd
import numpy as np
# 创建示例数据
dates = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
sales = np.random.rand(len(dates)) * 100
data = pd.DataFrame({'Date': dates, 'Sales': sales})
# 将日期转换为一年中的第几天
data['DayOfYear'] = data['Date'].dt.dayofyear
# 将 DayOfYear 转换为周期性特征(例如正弦和余弦)
data['DayOfYear_Sin'] = np.sin(2 * np.pi * data['DayOfYear'] / 365)
data['DayOfYear_Cos'] = np.cos(2 * np.pi * data['DayOfYear'] / 365)
print(data[['Date', 'DayOfYear', 'DayOfYear_Sin', 'DayOfYear_Cos']].head())
271-6-3、结果输出
# 271、pandas.Series.dt.dayofyear属性
# 271-1、季节性分析
# 见图1

# 271-2、时间序列分组
# DayOfYear
# 1     4.654971
# 2    22.423349
# 3    16.145457
# 4    16.341184
# 5    23.362987
# Name: Temperature, dtype: float64

# 271-3、日期差异计算
# Days difference: 167

# 271-4、数据对齐和合并
#    DayOfYear     Value1  Value2
# 0          1  61.680196     NaN
# 1          2  40.421598     NaN
# 2          3   2.239969     NaN
# 3          4  17.233058     NaN
# 4          5  34.516007     NaN

# 271-5、周期性特征工程
#         Date  DayOfYear  DayOfYear_Sin  DayOfYear_Cos
# 0 2024-01-01          1       0.017213       0.999852
# 1 2024-01-02          2       0.034422       0.999407
# 2 2024-01-03          3       0.051620       0.998667
# 3 2024-01-04          4       0.068802       0.997630
# 4 2024-01-05          5       0.085965       0.996298

图1:

272、pandas.Series.dt.days_in_month属性
272-1、语法
# 272、pandas.Series.dt.days_in_month属性
pandas.Series.dt.days_in_month
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、代码示例
# 272、pandas.Series.dt.days_in_month属性
# 272-1、财务分析
import pandas as pd
# 创建示例数据
data = {
    'date': pd.date_range(start='2024-01-01', periods=90, freq='D'),
    'sales': [100 + i for i in range(90)]  # 假设每天的销售额逐渐增加
}
df = pd.DataFrame(data)
# 计算每个月的总销售额
df['month'] = df['date'].dt.to_period('M')
monthly_sales = df.groupby('month')['sales'].sum()
# 获取每个月的天数
days_in_month = df['date'].dt.days_in_month.groupby(df['date'].dt.to_period('M')).first()
# 计算日均销售额
daily_avg_sales = monthly_sales / days_in_month
print(daily_avg_sales, end='\n\n')

# 272-2、时间序列数据处理
import pandas as pd
import numpy as np
# 创建示例气温数据
np.random.seed(0)
dates = pd.date_range(start='2024-01-01', periods=90, freq='D')
temperatures = np.random.normal(loc=20, scale=5, size=len(dates))  # 随机生成气温数据
df = pd.DataFrame({'date': dates, 'temperature': temperatures})
# 计算每个月的总气温
df['month'] = df['date'].dt.to_period('M')
monthly_temp_sum = df.groupby('month')['temperature'].sum()
# 获取每个月的天数
days_in_month = df['date'].dt.days_in_month.groupby(df['date'].dt.to_period('M')).first()
# 计算月均气温
monthly_avg_temp = monthly_temp_sum / days_in_month
print(monthly_avg_temp, end='\n\n')

# 272-3、数据清理和验证
import pandas as pd
# 创建包含日期的示例数据
dates = pd.Series(pd.to_datetime(['2024-01-31', '2024-02-30', '2024-03-15', '2024-04-31'], errors='coerce'))
# 检查每个日期是否在该月有效
valid_dates = dates[dates.dt.day <= dates.dt.days_in_month]
# 打印有效日期
print("有效日期:")
print(valid_dates.dt.strftime('%Y-%m-%d'), end='\n\n')

# 272-4、统计分析
import pandas as pd
# 创建示例事件数据
data = {
    'date': pd.date_range(start='2024-01-01', periods=90, freq='D'),
    'event_occurred': np.random.choice([0, 1], size=90)  # 随机事件发生(0或1)
}
df = pd.DataFrame(data)
# 计算每个月的事件发生总数
df['month'] = df['date'].dt.to_period('M')
monthly_event_count = df.groupby('month')['event_occurred'].sum()
# 获取每个月的天数
days_in_month = df['date'].dt.days_in_month.groupby(df['date'].dt.to_period('M')).first()
# 计算事件发生频率
event_frequency = monthly_event_count / days_in_month
print(event_frequency, end='\n\n')

# 272-5、时间特征工程
import pandas as pd
# 创建示例数据集
data = {
    'date': pd.date_range(start='2024-01-01', periods=90, freq='D'),
    'feature_1': np.random.rand(90),  # 随机特征
}
df = pd.DataFrame(data)
# 添加月份的天数作为特征
df['days_in_month'] = df['date'].dt.days_in_month
print(df.head())
272-6-3、结果输出
# 272、pandas.Series.dt.days_in_month属性
# 272-1、财务分析
# month
# 2024-01    115.000000
# 2024-02    145.000000
# 2024-03    168.870968
# Freq: M, dtype: float64

# 272-2、时间序列数据处理
# month
# 2024-01    22.167845
# 2024-02    18.475758
# 2024-03    18.707802
# Freq: M, dtype: float64

# 272-3、数据清理和验证
# 有效日期:
# 0    2024-01-31
# 2    2024-03-15
# dtype: object

# 272-4、统计分析
# month
# 2024-01    0.612903
# 2024-02    0.482759
# 2024-03    0.645161
# Freq: M, dtype: float64

# 272-5、时间特征工程
#         date  feature_1  days_in_month
# 0 2024-01-01   0.069167             31
# 1 2024-01-02   0.697429             31
# 2 2024-01-03   0.453543             31
# 3 2024-01-04   0.722056             31
# 4 2024-01-05   0.866382             31
273、pandas.Series.dt.quarter属性
273-1、语法
# 273、pandas.Series.dt.quarter属性
pandas.Series.dt.quarter
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、代码示例
# 273、pandas.Series.dt.quarter属性
# 273-1、财务分析
import pandas as pd
# 创建示例数据
data = {
    'date': pd.date_range(start='2023-01-01', periods=12, freq='ME'),
    'revenue': [1000, 1200, 1100, 1500, 1600, 1700, 1800, 2000, 2100, 2200, 2300, 2400]
}
df = pd.DataFrame(data)
# 添加季度列
df['quarter'] = df['date'].dt.quarter
# 按季度分组并计算总收入
quarterly_revenue = df.groupby('quarter')['revenue'].sum().reset_index()
print(quarterly_revenue, end='\n\n')

# 273-2、销售数据分析
import pandas as pd
# 创建示例数据
sales_data = {
    'date': pd.date_range(start='2023-01-01', periods=12, freq='ME'),
    'sales': [500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600]
}
sales_df = pd.DataFrame(sales_data)
# 添加季度列
sales_df['quarter'] = sales_df['date'].dt.quarter
# 按季度分组并计算总销售额
quarterly_sales = sales_df.groupby('quarter')['sales'].sum().reset_index()
print(quarterly_sales, end='\n\n')

# 273-3、季节性趋势研究
import pandas as pd
# 创建示例数据
consumer_spending = {
    'date': pd.date_range(start='2023-01-01', periods=12, freq='ME'),
    'spending': [300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850]
}
spending_df = pd.DataFrame(consumer_spending)
# 添加季度列
spending_df['quarter'] = spending_df['date'].dt.quarter
# 按季度分组并计算总消费支出
quarterly_spending = spending_df.groupby('quarter')['spending'].sum().reset_index()
print(quarterly_spending, end='\n\n')

# 273-4、预算和预测
import pandas as pd
# 创建示例数据
budget_data = {
    'date': pd.date_range(start='2023-01-01', periods=12, freq='ME'),
    'budget': [10000, 12000, 11000, 15000, 16000, 17000, 18000, 20000, 21000, 22000, 23000, 24000]
}
budget_df = pd.DataFrame(budget_data)
# 添加季度列
budget_df['quarter'] = budget_df['date'].dt.quarter
# 按季度分组并计算总预算
quarterly_budget = budget_df.groupby('quarter')['budget'].sum().reset_index()
print(quarterly_budget, end='\n\n')

# 273-5、数据聚合
import pandas as pd
# 创建示例数据
large_data = {
    'date': pd.date_range(start='2023-01-01', periods=24, freq='ME'),
    'value': range(24)
}
large_df = pd.DataFrame(large_data)
# 添加季度列
large_df['quarter'] = large_df['date'].dt.quarter
# 按季度分组并计算每个季度的平均值
quarterly_aggregate = large_df.groupby('quarter')['value'].mean().reset_index()
print(quarterly_aggregate, end='\n\n')

# 273-6、季度数据可视化
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
# 配置字体,确保中文字符正常显示
matplotlib.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 创建示例数据
data = {
    'date': pd.date_range(start='2023-01-01', periods=12, freq='ME'),
    'revenue': [1000, 1200, 1100, 1500, 1600, 1700, 1800, 2000, 2100, 2200, 2300, 2400]
}
df = pd.DataFrame(data)
# 添加季度列
df['quarter'] = df['date'].dt.quarter
# 按季度分组并计算总收入
quarterly_revenue = df.groupby('quarter')['revenue'].sum().reset_index()
# 可视化
plt.figure(figsize=(8, 5))
plt.bar(quarterly_revenue['quarter'], quarterly_revenue['revenue'], color='skyblue')
plt.xlabel('季度')
plt.ylabel('总收入')
plt.title('各季度总收入')
plt.xticks(quarterly_revenue['quarter'])
plt.show()

# 273-7、季度同比分析
import pandas as pd
# 创建示例数据(跨年度)
data = {
    'date': pd.date_range(start='2022-01-01', periods=24, freq='ME'),
    'revenue': [1000, 1200, 1100, 1500, 1600, 1700,
                1800, 2000, 2100, 2200, 2300, 2400,
                1300, 1400, 1350, 1550, 1650, 1750,
                1850, 2050, 2150, 2250, 2350, 2450]
}
df = pd.DataFrame(data)
# 添加年份和季度列
df['year'] = df['date'].dt.year
df['quarter'] = df['date'].dt.quarter
# 按年份和季度分组并计算总收入
quarterly_revenue = df.groupby(['year', 'quarter'])['revenue'].sum().reset_index()
# 创建一个新的列来计算同比
quarterly_revenue['previous_year_revenue'] = quarterly_revenue.groupby('quarter')['revenue'].shift(1)
quarterly_revenue['year_on_year_growth'] = (quarterly_revenue['revenue'] - quarterly_revenue['previous_year_revenue']) / quarterly_revenue['previous_year_revenue'] * 100
print(quarterly_revenue, end='\n\n')

# 273-8、季度预测模型
import pandas as pd
from sklearn.linear_model import LinearRegression
import numpy as np
# 创建示例数据(只使用过去的季度数据)
data = {
    'date': pd.date_range(start='2023-01-01', periods=12, freq='ME'),
    'revenue': [1000, 1200, 1100, 1500, 1600, 1700,
                1800, 2000, 2100, 2200, 2300, 2400]
}
df = pd.DataFrame(data)
# 添加季度列
df['quarter'] = df['date'].dt.quarter
# 准备训练数据
X = np.array(df['quarter']).reshape(-1, 1)  # 特征变量
y = np.array(df['revenue'])                   # 标签变量
# 创建线性回归模型并训练
model = LinearRegression()
model.fit(X, y)
# 预测未来4个季度的收入
future_quarters = np.array([1, 2, 3, 4]).reshape(-1, 1)
predicted_revenue = model.predict(future_quarters)
print("未来4个季度的预测收入:", [f"{revenue:.2f}" for revenue in predicted_revenue])
273-6-3、结果输出
# 273、pandas.Series.dt.quarter属性
# 273-1、财务分析
#    quarter  revenue
# 0        1     3300
# 1        2     4800
# 2        3     5900
# 3        4     6900

# 273-2、销售数据分析
#    quarter  sales
# 0        1   1800
# 1        2   2700
# 2        3   3600
# 3        4   4500

# 273-3、季节性趋势研究
#    quarter  spending
# 0        1      1050
# 1        2      1500
# 2        3      1950
# 3        4      2400

# 273-4、预算和预测
#    quarter  budget
# 0        1   33000
# 1        2   48000
# 2        3   59000
# 3        4   69000

# 273-5、数据聚合
#    quarter  value
# 0        1    7.0
# 1        2   10.0
# 2        3   13.0
# 3        4   16.0

# 273-6、季度数据可视化
# 见图2

# 273-7、季度同比分析
#    year  quarter  revenue  previous_year_revenue  year_on_year_growth
# 0  2022        1     3300                    NaN                  NaN
# 1  2022        2     4800                    NaN                  NaN
# 2  2022        3     5900                    NaN                  NaN
# 3  2022        4     6900                    NaN                  NaN
# 4  2023        1     4050                 3300.0            22.727273
# 5  2023        2     4950                 4800.0             3.125000
# 6  2023        3     6050                 5900.0             2.542373
# 7  2023        4     7050                 6900.0             2.173913

# 273-8、季度预测模型
# 未来4个季度的预测收入: ['1146.67', '1543.33', '1940.00', '2336.67']

图2:

274、pandas.Series.dt.is_month_start属性
274-1、语法
# 274、pandas.Series.dt.is_month_start属性
pandas.Series.dt.is_month_start
Indicates whether the date is the first day of the month.

Returns:
Series or array
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、代码示例
# 274、pandas.Series.dt.is_month_start属性
# 274-1、财务报表分析
import pandas as pd
# 创建一个示例数据集
data = {
    'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
    'amount': range(60)
}
df = pd.DataFrame(data)
# 标记每个月的第一天
df['is_month_start'] = df['date'].dt.is_month_start
# 筛选出每个月的第一天数据
month_start_data = df[df['is_month_start']]
print(month_start_data, end='\n\n')

# 274-2、时间序列数据处理
import pandas as pd
# 创建一个示例数据集
data = {
    'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
    'value': range(60)
}
df = pd.DataFrame(data)
# 标记每个月的第一天
df['is_month_start'] = df['date'].dt.is_month_start
# 筛选出每个月的第一天数据
month_start_df = df[df['is_month_start']]
# 计算每个月的平均值
monthly_avg = month_start_df.resample('ME', on='date').mean()
print(monthly_avg, end='\n\n')

# 274-3、事件触发
import pandas as pd
# 创建一个示例数据集
data = {
    'date': pd.date_range(start='2024-01-01', periods=60, freq='D')
}
df = pd.DataFrame(data)
# 标记每个月的第一天
df['is_month_start'] = df['date'].dt.is_month_start
# 触发事件的日期
events = df[df['is_month_start']]
for date in events['date']:
    print(f"Trigger event on: {date}")

# 274-4、数据清洗
import pandas as pd
# 创建一个示例数据集
data = {
    'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
    'value': range(60)
}
df = pd.DataFrame(data)
# 标记每个月的第一天
df['is_month_start'] = df['date'].dt.is_month_start
# 清理数据,只保留每个月第一天的数据
cleaned_df = df[df['is_month_start']]
print(cleaned_df, end='\n\n')

# 274-5、可视化分析
import pandas as pd
import matplotlib.pyplot as plt
# 创建一个示例数据集
data = {
    'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
    'value': range(60)
}
df = pd.DataFrame(data)
# 标记每个月的第一天
df['is_month_start'] = df['date'].dt.is_month_start
# 绘制时间序列图
plt.figure(figsize=(12, 6))
plt.plot(df['date'], df['value'], label='Value')
plt.scatter(df[df['is_month_start']]['date'],
            df[df['is_month_start']]['value'],
            color='red',
            label='Month Start',
            marker='o')
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Time Series with Month Start Marked')
plt.legend()
plt.grid(True)
plt.show()

# 274-6、生成周期性报告
import pandas as pd
# 创建一个示例数据集
data = {
    'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
    'sales': range(60)
}
df = pd.DataFrame(data)
# 标记每个月的第一天
df['is_month_start'] = df['date'].dt.is_month_start
# 按月份生成报告
monthly_report = df[df['is_month_start']].set_index('date').resample('ME').sum()
print(monthly_report)
274-6-3、结果输出
# 274、pandas.Series.dt.is_month_start属性
# 274-1、财务报表分析
#          date  amount  is_month_start
# 0  2024-01-01       0            True
# 31 2024-02-01      31            True

# 274-2、时间序列数据处理
#             value  is_month_start
# date                             
# 2024-01-31    0.0             1.0
# 2024-02-29   31.0             1.0

# 274-3、事件触发
# Trigger event on: 2024-01-01 00:00:00
# Trigger event on: 2024-02-01 00:00:00

# 274-4、数据清洗
#          date  value  is_month_start
# 0  2024-01-01      0            True
# 31 2024-02-01     31            True

# 274-5、可视化分析
# 见图3

# 274-6、生成周期性报告
#             sales  is_month_start
# date                             
# 2024-01-31      0               1
# 2024-02-29     31               1

图3:

275、pandas.Series.dt.is_month_end属性
275-1、语法
# 275、pandas.Series.dt.is_month_end属性
pandas.Series.dt.is_month_end
Indicates whether the date is the last day of the month.

Returns:
Series or array
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、代码示例
# 275、pandas.Series.dt.is_month_end属性
# 275-1、数据筛选
import pandas as pd
# 创建一个包含日期的 Series
dates = pd.Series(pd.date_range(start='2024-01-01', periods=60, freq='D'))
# 筛选出每个月的最后一天
month_end_dates = dates[dates.dt.is_month_end]
print(month_end_dates, end='\n\n')

# 275-2、统计分析
import pandas as pd
import numpy as np
# 假设我们有一个包含销售数据的DataFrame
data = pd.DataFrame({
    'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
    'sales': np.random.randint(100, 200, size=60)
})
# 计算每个月最后一天的销售额
month_end_sales = data[data['date'].dt.is_month_end]
print(month_end_sales, end='\n\n')

# 275-3、数据可视化
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 生成随机销售数据
data = pd.DataFrame({
    'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
    'sales': np.random.randint(100, 200, size=60)
})
# 标记每个月的最后一天
data['is_month_end'] = data['date'].dt.is_month_end
# 绘制时间序列图
plt.figure(figsize=(10, 6))
plt.plot(data['date'], data['sales'], label='Daily Sales')
plt.scatter(data[data['is_month_end']]['date'], data[data['is_month_end']]['sales'], color='red', label='Month End Sales')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.title('Daily Sales with Month End Highlights')
plt.legend()
plt.show()

# 275-4、数据校验
import pandas as pd
# 创建一个日期范围
date_range = pd.date_range(start='2024-01-01', periods=60, freq='D')
# 检查每个月是否有月末记录
month_end_dates = date_range[date_range.is_month_end]
missing_month_end = pd.date_range(start='2024-01-01', periods=3, freq='ME').difference(month_end_dates)
print(f"缺少的月末日期: {missing_month_end}", end='\n\n')

# 275-5、财务报表分析
import pandas as pd
import numpy as np
# 假设我们有一个包含财务数据的DataFrame
financial_data = pd.DataFrame({
    'date': pd.date_range(start='2024-01-01', periods=60, freq='D'),
    'balance': np.random.randint(10000, 20000, size=60)
})
# 提取每个月的月末财务数据
month_end_financials = financial_data[financial_data['date'].dt.is_month_end]
print(month_end_financials)
275-6-3、结果输出
# 275、pandas.Series.dt.is_month_end属性
# 275-1、数据筛选
# 30   2024-01-31
# 59   2024-02-29
# dtype: datetime64[ns]

# 275-2、统计分析
#          date  sales
# 30 2024-01-31    127
# 59 2024-02-29    170

# 275-3、数据可视化
# 见图3

# 275-4、数据校验
# 缺少的月末日期: DatetimeIndex(['2024-03-31'], dtype='datetime64[ns]', freq='ME')

# 275-5、财务报表分析
#          date  balance
# 30 2024-01-31    13937
# 59 2024-02-29    19661

图4:

二、推荐阅读

1、Python筑基之旅
2、Python函数之旅
3、Python算法之旅
4、Python魔法之旅
5、博客个人主页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1983986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吴恩达老师机器学习作业-ex7(聚类)

导入库&#xff0c;读取数据&#xff0c;查看数据类型等进行分析&#xff0c;可视化数据 import matplotlib.pyplot as plt import numpy as np import scipy.io as sio#读取数据 path "./ex7data2.mat" data sio.loadmat(path) # print(type(data)) # print(data…

【LabVIEW学习篇 - 13】:队列

文章目录 队列 队列 队列通常情况下是一种先入先出&#xff08;FIFO&#xff1a;First in First out&#xff09;的数据结构&#xff0c;常用作数据缓存&#xff0c;通过队列结构可以保证数据有序的传递&#xff0c;避免竞争和冲突。 案例&#xff1a;利用队列&#xff0c;模…

WordPress--漏洞复现

1.搭建好环境进入后台登录界面登录管理员 2.进入后选择外观---编辑 3.将文件内容改为我们的一句话木马&#xff0c;点击更新文件 4.访问这个文件显示出phpinfo证明注入成功

PXE技术在操作系统批量安装中的应用与实现

PXE&#xff08;Preboot Execution Environment&#xff09;即预启动执行环境&#xff0c;它是一种可以使计算机通过网络启动的技术。 一、工作原理 客户端请求&#xff1a; 当支持 PXE 的计算机启动时&#xff0c;其网卡的固件会广播一个请求&#xff0c;寻找网络中的 PXE 服…

JavaScript Web API入门day2

目录 1.DOM事件基础 1.1 事件监听 1.2 事件监听案例 1.2.1 京东点击关闭顶部广告 1.2.2 随机点名案例 1.3 事件监听版本 2. 事件类型 2.1 事件类型案例 2.1.1 轮播图点击切换 2.1.2 评论字数统计 3.事件对象 3.1 获取事件对象 3.2 事件对象常用属性 3.3 事件对象…

【技术前沿】3.3KW高功率密度新突破!基于Infineon XMC1400搭配CoolSiC™ Mosfet 的PFC数字电源方案

随着社会经济发展、能源结构变革&#xff0c;近几年全球对家用储能系统的需求量一直保持相当程度的增长。2023年&#xff0c;全球家用储能系统市场销售额达到了87.4亿美元&#xff0c;预计2029年将达到498.6亿美元&#xff0c;年复合增长率&#xff08;CAGR&#xff09;为33.68…

定时任务-xxl-job

一. 为什么定时任务可以定时执行 定时任务可以定时执行的原理是通过操作系统提供的定时器实现的。 以下是定时任务能够准时执行的基本原理和相关技术&#xff1a; 操作系统的调度器&#xff1a; 操作系统&#xff08;如Linux、Windows等&#xff09;内部都有一个调度器&#x…

TortoiseGit小乌龟在gitlab配置ssh免密

1. 生成ssh密钥(默认在~/.ssh路径生产&#xff0c;id_rsa和id_rsa.pub) ssh-keygen -t rsa -b 4096 -C "xxxqq.com"2. 打开gitlab&#xff0c;在搜索栏搜索ssh&#xff0c;找到SSH Keys&#xff0c;然后添加id_rsa.pub公钥的内容到网页&#xff0c;保存。 3. 打开To…

如何将PostgreSQL的数据实时迁移到SelectDB?

PostgreSQL 作为一个开源且功能强大的关系型数据库管理系统&#xff0c;在 OLTP 系统中得到了广泛应用。很多企业利用其卓越的性能和灵活的架构&#xff0c;应对高并发事务、快速响应等需求。 然而对于 OLAP 场景&#xff0c;PostgreSQL 可能并不是最佳选择。 为了实现庞大规…

数据结构(其三)--栈与队列

目录 5.栈 5.1 栈的基本操作 5.2 各种栈 &#xff08;1&#xff09;.顺序栈 i.普通顺序栈 ii.共享栈 iii.关于销毁 &#xff08;2&#xff09;.链栈 6.队列 6.1 队列的基本操作 6.2 各种队列 &#xff08;1&#xff09;.循环队列 i.代码 ii.另外一种写法 &#xff08…

[Latex美化]-表格加底色,添加灰色美化表格,便于阅读

1 导入库 \usepackage{xcolor} \usepackage{colortbl, booktabs} 2 插入指令&#xff08;指定行前&#xff09; \rowcolor{gray!30} 具体代码如下 效果如下

循环神经网络RNN介绍

文章目录 1、学习介绍2、RNN的基本结构2.1、图例2.2、公式2.3、公式计算示例2.3.1、给定参数2.3.2、时间步计算 3、序列依赖与梯度消失/爆炸3.1、序列依赖3.2、梯度消失与爆炸3.3、总结 4、传统的前馈神经网络4.1、结构4.2、工作原理4.3、特点4.4、局限性 5、CNN与RNN的关系5.1…

【建造者模式】全面解析与最佳实践:打造复杂对象的蓝图(构建复杂对象的艺术)

文章目录 Java中的建造者模式&#xff1a;全面解析与最佳实践1. 引言2. 建造者模式概念定义与用途适用场景解决的问题 3. 建造者模式原理主要角色解释工作流程UML图和时序图 4. 建造者模式在Java中的实现逐步构建示例程序1. 创建抽象建造者类2. 实现具体建造者类3. 设计产品类4…

如何在厂商软件不提供二次开发资源的情况下实现LabVIEW开发

在遇到厂商提供的软件不支持二次开发资源时&#xff0c;如果需要使用LabVIEW进行开发&#xff0c;通常面临以下几个挑战&#xff1a;设备通讯接口封闭、协议不公开、厂商技术支持有限等。这些问题需要综合考虑并制定解决方案&#xff0c;以下是详细的分析&#xff1a; 1. 了解原…

权限模块开发+权限与角色关联(完整CRUD)

文章目录 &#x1f31e; Sun Frame&#xff1a;SpringBoot 的轻量级开发框架&#xff08;个人开源项目推荐&#xff09;&#x1f31f; 亮点功能&#x1f4e6; spring cloud模块概览常用工具 &#x1f517; 更多信息1.easycode生成代码1.配置2.AuthPermissionDao.java剪切到mapp…

SharpLab:.Net反编译工具,方便实时查看反编译后的代码!

C#提供了很多高级语法&#xff0c;很多都是语法糖。这些语法糖对于初学者来说&#xff0c;很多无法理解。 下面推荐一个开源项目&#xff0c;它能够让我们&#xff0c;实时查看编译过程、生成的中间语言&#xff08;IL&#xff09;以及反编译后的代码。 01 项目简介 SharpLa…

C语言 ——深入理解指针(2)

目录 1. 数组名的理解2. 二级指针3. 指针数组4. 字符指针变量5. 数组指针变量6. 函数指针变量7. 函数指针数组 1. 数组名的理解 这里我们使用 &arr[0] 的方式拿到了数组第一个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;而且是数组首元素的地址&#x…

TabLayout使用以及自定义tab标签

<?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tool…

YoloV10 论文翻译(Real-Time End-to-End Object Detection)

​摘要 近年来&#xff0c;YOLO因其在计算成本与检测性能之间实现了有效平衡&#xff0c;已成为实时目标检测领域的主流范式。研究人员对YOLO的架构设计、优化目标、数据增强策略等方面进行了探索&#xff0c;并取得了显著进展。然而&#xff0c;YOLO对非极大值抑制&#xff0…

01【功能项目】之【主角射线点击导航】

首先创建一个Unity3D的项目 打开资源商店添加一个人物模型 选择一个免费资源主角添加至项目中 在unity中打开后点击下载包 点击导入包 导入成功后会出现在资源包Assets下 右键创建地面 设置地面尺寸 创建一个材料方便给地面调配颜色 选择材料的颜色 将材质拖拽给地面组为组件 将…