当前位置:   article > 正文

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

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

目录

一、用法精讲

301、pandas.Series.dt.components属性

301-1、语法

301-2、参数

301-3、功能

301-4、返回值

301-5、说明

301-6、用法

301-6-1、数据准备

301-6-2、代码示例

301-6-3、结果输出

302、pandas.Series.dt.to_pytimedelta方法

302-1、语法

302-2、参数

302-3、功能

302-4、返回值

302-5、说明

302-6、用法

302-6-1、数据准备

302-6-2、代码示例

302-6-3、结果输出

303、pandas.Series.dt.total_seconds方法

303-1、语法

303-2、参数

303-3、功能

303-4、返回值

303-5、说明

303-6、用法

303-6-1、数据准备

303-6-2、代码示例

303-6-3、结果输出

304、pandas.Series.str.capitalize方法

304-1、语法

304-2、参数

304-3、功能

304-4、返回值

304-5、说明

304-6、用法

304-6-1、数据准备

304-6-2、代码示例

304-6-3、结果输出

305、pandas.Series.str.casefold方法

305-1、语法

305-2、参数

305-3、功能

305-4、返回值

305-5、说明

305-6、用法

305-6-1、数据准备

305-6-2、代码示例

305-6-3、结果输出

二、推荐阅读

1、Python筑基之旅

2、Python函数之旅

3、Python算法之旅

4、Python魔法之旅

5、博客个人主页

一、用法精讲

301、pandas.Series.dt.components属性
301-1、语法
  1. # 301、pandas.Series.dt.components属性
  2. pandas.Series.dt.components
  3. Return a Dataframe of the components of the Timedeltas.
  4. Returns:
  5. DataFrame
301-2、参数

        无

301-3、功能

        从一个时间序列对象中提取项的各个部分,如年份、月份、日、小时、分钟、秒、毫秒、微秒、纳秒等。

301-4、返回值

        返回一个DataFrame,其中每一列代表时间序列的一个组成部分。

301-5、说明

        使用场景:

301-5-1、财务数据分析:在金融数据分析中,通常需要对日期进行分解,以便按年、月、日、季度等进行聚合和分析。例如,按季度计算股票平均价格。

301-5-2、运营数据分析:在运营数据分析中,可以根据时间的不同组成部分对数据进行拆分和聚合。例如,按周统计网站访问量。

301-5-3、机器学习中的特征工程:在机器学习的特征工程中,时间序列数据的不同组成部分可以作为特征,以提高模型的性能。例如,构建包含时间特征的机器学习数据集。

301-5-4、物流和供应链管理:在物流和供应链管理中,可以根据时间的不同组成部分优化运输和库存管理。例如,根据小时分析仓库入库量。

301-5-5、电商数据分析:在电商平台的数据分析中,可以根据时间的不同组成部分分析销售趋势和用户行为。例如,按月统计商品销售量。

301-6、用法
301-6-1、数据准备
301-6-2、代码示例
  1. # 301、pandas.Series.dt.components属性
  2. # 301-1、按季度计算股票平均价格
  3. import pandas as pd
  4. # 创建示例数据
  5. date_range = pd.date_range(start='2024-01-01', periods=100, freq='D')
  6. stock_prices = pd.Series(range(100), index=date_range)
  7. df = pd.DataFrame({'date': date_range, 'price': stock_prices})
  8. # 提取日期各部分
  9. df['quarter'] = df['date'].dt.quarter
  10. # 按季度计算平均价格
  11. quarterly_avg_price = df.groupby('quarter')['price'].mean()
  12. print(quarterly_avg_price, end='\n\n')
  13. # 301-2、按周统计网站访问量
  14. import pandas as pd
  15. # 创建示例数据
  16. date_range = pd.date_range(start='2024-01-01', periods=30, freq='D')
  17. visit_counts = pd.Series(range(30), index=date_range)
  18. df = pd.DataFrame({'date': date_range, 'visits': visit_counts})
  19. # 提取日期各部分
  20. df['week'] = df['date'].dt.isocalendar().week
  21. # 按周统计访问量
  22. weekly_visits = df.groupby('week')['visits'].sum()
  23. print(weekly_visits, end='\n\n')
  24. # 301-3、构建包含时间特征的机器学习数据集
  25. import pandas as pd
  26. # 创建示例数据
  27. date_range = pd.date_range(start='2024-01-01', periods=50, freq='h')
  28. values = pd.Series(range(50), index=date_range)
  29. df = pd.DataFrame({'datetime': date_range, 'value': values})
  30. # 提取日期时间各部分
  31. df['year'] = df['datetime'].dt.year
  32. df['month'] = df['datetime'].dt.month
  33. df['day'] = df['datetime'].dt.day
  34. df['hour'] = df['datetime'].dt.hour
  35. df['weekday'] = df['datetime'].dt.weekday
  36. print(df.head(), end='\n\n')
  37. # 301-4、根据小时分析仓库入库量
  38. import pandas as pd
  39. # 创建示例数据
  40. date_range = pd.date_range(start='2024-01-01', periods=24, freq='h')
  41. inbound_quantities = pd.Series(range(24), index=date_range)
  42. df = pd.DataFrame({'datetime': date_range, 'quantity': inbound_quantities})
  43. # 提取时间各部分
  44. df['hour'] = df['datetime'].dt.hour
  45. # 按小时统计入库量
  46. hourly_inbound = df.groupby('hour')['quantity'].sum()
  47. print(hourly_inbound, end='\n\n')
  48. # 301-5、按月统计商品销售量
  49. import pandas as pd
  50. # 创建示例数据
  51. date_range = pd.date_range(start='2024-01-01', periods=100, freq='D')
  52. sales_quantities = pd.Series(range(100), index=date_range)
  53. df = pd.DataFrame({'date': date_range, 'sales': sales_quantities})
  54. # 提取日期各部分
  55. df['month'] = df['date'].dt.month
  56. # 按月统计销售量
  57. monthly_sales = df.groupby('month')['sales'].sum()
  58. print(monthly_sales, end='\n\n')
  59. # 301-6、网站每日访问量分析(可视化)
  60. import pandas as pd
  61. import numpy as np
  62. import matplotlib.pyplot as plt
  63. # 生成日期范围
  64. date_range = pd.date_range(start='2024-07-01', end='2024-07-31', freq='D')
  65. # 模拟每日访问量数据
  66. np.random.seed(42)
  67. visits = np.random.poisson(lam=100, size=len(date_range))
  68. # 创建数据框
  69. df = pd.DataFrame({'date': date_range, 'visits': visits})
  70. print(df.head())
  71. # 设置图形大小
  72. plt.figure(figsize=(12, 6))
  73. # 绘制时间序列图
  74. plt.plot(df['date'], df['visits'], marker='o', linestyle='-', color='b', label='Daily Visits')
  75. plt.scatter(df['date'], df['visits'], color='red') # 设置数据点为红色
  76. # 添加标题和标签
  77. plt.title('Daily Website Visits in July 2024')
  78. plt.xlabel('Date')
  79. plt.ylabel('Number of Visits')
  80. plt.xticks(rotation=15)
  81. plt.grid(True)
  82. # 添加平均线
  83. average_visits = df['visits'].mean()
  84. plt.axhline(y=average_visits, color='r', linestyle='--', label=f'Average Visits ({average_visits:.1f})')
  85. # 添加图例
  86. plt.legend()
  87. # 显示图形
  88. plt.tight_layout()
  89. # 显示数据标签并设置为红色
  90. for i in range(len(df)):
  91. plt.annotate(text=str(df['visits'][i]), xy=(df['date'][i], df['visits'][i]),
  92. xytext=(-5, 5), textcoords='offset points', ha='center', va='bottom', color='red', fontweight='bold')
  93. plt.show()
301-6-3、结果输出
  1. # 301、pandas.Series.dt.components属性
  2. # 301-1、按季度计算股票平均价格
  3. # quarter
  4. # 1 45.0
  5. # 2 95.0
  6. # Name: price, dtype: float64
  7. # 301-2、按周统计网站访问量
  8. # week
  9. # 1 21
  10. # 2 70
  11. # 3 119
  12. # 4 168
  13. # 5 57
  14. # Name: visits, dtype: int64
  15. # 301-3、构建包含时间特征的机器学习数据集
  16. # datetime value year month day hour weekday
  17. # 2024-01-01 00:00:00 2024-01-01 00:00:00 0 2024 1 1 0 0
  18. # 2024-01-01 01:00:00 2024-01-01 01:00:00 1 2024 1 1 1 0
  19. # 2024-01-01 02:00:00 2024-01-01 02:00:00 2 2024 1 1 2 0
  20. # 2024-01-01 03:00:00 2024-01-01 03:00:00 3 2024 1 1 3 0
  21. # 2024-01-01 04:00:00 2024-01-01 04:00:00 4 2024 1 1 4 0
  22. # 301-4、根据小时分析仓库入库量
  23. # hour
  24. # 0 0
  25. # 1 1
  26. # 2 2
  27. # 3 3
  28. # 4 4
  29. # 5 5
  30. # 6 6
  31. # 7 7
  32. # 8 8
  33. # 9 9
  34. # 10 10
  35. # 11 11
  36. # 12 12
  37. # 13 13
  38. # 14 14
  39. # 15 15
  40. # 16 16
  41. # 17 17
  42. # 18 18
  43. # 19 19
  44. # 20 20
  45. # 21 21
  46. # 22 22
  47. # 23 23
  48. # Name: quantity, dtype: int64
  49. # 301-5、按月统计商品销售量
  50. # month
  51. # 1 465
  52. # 2 1305
  53. # 3 2325
  54. # 4 855
  55. # Name: sales, dtype: int64
  56. # 301-6、网站每日访问量分析(可视化)
  57. # 见图1
  58. # date visits
  59. # 0 2024-07-01 96
  60. # 1 2024-07-02 107
  61. # 2 2024-07-03 88
  62. # 3 2024-07-04 103
  63. # 4 2024-07-05 111

图1:

302pandas.Series.dt.to_pytimedelta方法
302-1、语法
  1. # 302、pandas.Series.dt.to_pytimedelta方法
  2. pandas.Series.dt.to_pytimedelta()
  3. Return an array of native datetime.timedelta objects.
  4. Python’s standard datetime library uses a different representation timedelta’s. This method converts a Series of pandas Timedeltas to datetime.timedelta format with the same length as the original Series.
  5. Returns:
  6. numpy.ndarray
  7. Array of 1D containing data with datetime.timedelta type.
302-2、参数

        无

302-3、功能

        用于将pandas.Series对象中的时间差(Timedelta)数据转换为Python的datetime.timedelta对象。

302-4、返回值

        返回一个pandas.Series对象,其中的每一个元素都是一个datetime.timedelta对象。

302-5、说明

        使用场景:

302-5-1、与其他库兼容:某些库或函数可能不直接支持pandas的Timedelta类型,但可以接受标准Python的timedelta类型。在这种情况下,可以使用to_pytimedelta()进行转换。

302-5-2、标准化处理:在数据分析中,如果你需要将时间差数据传递给其他只接受Python原生数据类型的工具或函数(例如自定义代码、第三方库等),使用to_pytimedelta()可以确保数据格式的一致性。

302-5-3、调试和测试:在调试代码时,可能需要将pandas的Timedelta对象转换为Python标准库的timedelta对象,以便更容易地验证和比较结果。

302-6、用法
302-6-1、数据准备
302-6-2、代码示例
  1. # 302、pandas.Series.dt.to_pytimedelta方法
  2. # 302-1、与其他库兼容
  3. import pandas as pd
  4. # 创建一个包含时间差的Series
  5. timedelta_series = pd.Series(pd.to_timedelta(['1 days', '2 days', '3 days']))
  6. # 将Series转换为Python的timedelta对象
  7. pytimedelta_series = timedelta_series.dt.to_pytimedelta()
  8. # 例如,假设你有一个自定义的函数需要标准的timedelta对象
  9. def custom_function(timedeltas):
  10. for delta in timedeltas:
  11. print(f"Processed timedelta: {delta}")
  12. custom_function(pytimedelta_series)
  13. print('\n')
  14. # 302-2、标准化处理
  15. import pandas as pd
  16. from datetime import timedelta
  17. # 创建一个包含时间差的Series
  18. timedelta_series = pd.Series(pd.to_timedelta(['10 hours', '5 hours', '8 hours']))
  19. # 将Series转换为Python的timedelta对象
  20. pytimedelta_series = timedelta_series.dt.to_pytimedelta()
  21. # 使用标准Python的timedelta对象
  22. total_duration = sum(pytimedelta_series, timedelta())
  23. print(f"Total duration: {total_duration}", end='\n\n')
  24. # 302-3、调试和测试
  25. import pandas as pd
  26. # 创建一个包含时间差的 Series
  27. timedelta_series = pd.Series(pd.to_timedelta(['1 days 2 hours', '3 days 4 hours']))
  28. # 将 Series 转换为 Python 的 timedelta 对象
  29. pytimedelta_series = timedelta_series.dt.to_pytimedelta()
  30. # 假设你要验证转换后的结果
  31. for original, converted in zip(timedelta_series, pytimedelta_series):
  32. print(f"Original timedelta: {original}, Converted timedelta: {converted}")
302-6-3、结果输出
  1. # 302、pandas.Series.dt.to_pytimedelta方法
  2. # 302-1、与其他库兼容
  3. # Processed timedelta: 1 day, 0:00:00
  4. # Processed timedelta: 2 days, 0:00:00
  5. # Processed timedelta: 3 days, 0:00:00
  6. # 302-2、标准化处理
  7. # Total duration: 23:00:00
  8. # 302-3、调试和测试
  9. # Original timedelta: 1 days 02:00:00, Converted timedelta: 1 day, 2:00:00
  10. # Original timedelta: 3 days 04:00:00, Converted timedelta: 3 days, 4:00:00
303、pandas.Series.dt.total_seconds方法
303-1、语法
  1. # 303、pandas.Series.dt.total_seconds方法
  2. pandas.Series.dt.total_seconds(*args, **kwargs)
  3. Return total duration of each element expressed in seconds.
  4. This method is available directly on TimedeltaArray, TimedeltaIndex and on Series containing timedelta values under the .dt namespace.
  5. Returns:
  6. ndarray, Index or Series
  7. When the calling object is a TimedeltaArray, the return type is ndarray. When the calling object is a TimedeltaIndex, the return type is an Index with a float64 dtype. When the calling object is a Series, the return type is Series of type float64 whose index is the same as the original.
303-2、参数

303-2-1、*args(可选)其他位置参数,为后续扩展功能做预留。

303-2-2、**kwargs(可选)其他关键字参数,为后续扩展功能做预留。

303-3、功能

        用于将Timedelta对象的时间差转换为秒数,该功能特别适用于时间差数据的处理与分析。

303-4、返回值

        返回一个浮点数,表示时间差的总秒数,对于Series对象,返回一个包含总秒数的Series。

303-5、说明

        使用场景:

303-5-1、计算总秒数:假设你有一个pandas.Series对象,其中包含多个时间差数据,你可以使用该方法将其转换为秒数

303-5-2、数据分析:在数据分析中,可能需要将时间差转换为秒数以便进行统计分析,例如,计算平均时间差。

303-5-3、转换为其他单位:将时间差数据转换为秒数后,可以方便地进行其他单位的转换,例如,小时或分钟。

303-6、用法
303-6-1、数据准备
303-6-2、代码示例
  1. # 303、pandas.Series.dt.total_seconds方法
  2. # 303-1、计算总秒数
  3. import pandas as pd
  4. # 创建一个包含时间差的Series
  5. timedelta_series = pd.Series(pd.to_timedelta(['1 days 2 hours', '3 days 4 hours']))
  6. # 计算总秒数
  7. seconds_series = timedelta_series.dt.total_seconds()
  8. print(seconds_series, end='\n\n')
  9. # 303-2、数据分析
  10. import pandas as pd
  11. # 创建一个包含时间差的Series
  12. timedelta_series = pd.Series(pd.to_timedelta(['10 minutes', '20 minutes', '30 minutes']))
  13. # 计算总秒数
  14. seconds_series = timedelta_series.dt.total_seconds()
  15. # 计算平均时间差(以秒为单位)
  16. average_seconds = seconds_series.mean()
  17. print(f"Average duration in seconds: {average_seconds}", end='\n\n')
  18. # 303-3、转换为其他单位
  19. import pandas as pd
  20. # 创建一个包含时间差的Series
  21. timedelta_series = pd.Series(pd.to_timedelta(['2 hours', '3.5 hours', '1 hour 45 minutes']))
  22. # 计算总秒数
  23. seconds_series = timedelta_series.dt.total_seconds()
  24. # 转换为小时
  25. hours_series = seconds_series / 3600
  26. print(hours_series)
303-6-3、结果输出
  1. # 303、pandas.Series.dt.total_seconds方法
  2. # 303-1、计算总秒数
  3. # 0 93600.0
  4. # 1 273600.0
  5. # dtype: float64
  6. # 303-2、数据分析
  7. # Average duration in seconds: 1200.0
  8. # 303-3、转换为其他单位
  9. # 0 2.00
  10. # 1 3.50
  11. # 2 1.75
  12. # dtype: float64
304pandas.Series.str.capitalize方法
304-1、语法
  1. # 304、pandas.Series.str.capitalize方法
  2. pandas.Series.str.capitalize()
  3. Convert strings in the Series/Index to be capitalized.
  4. Equivalent to str.capitalize().
  5. Returns:
  6. Series or Index of object.
304-2、参数

        无

304-3、功能

        用于将字符串中的每个元素的首字母大写,其余字母小写,这对于标准化文本数据中的字符串格式非常有用。

304-4、返回值

        返回一个新的Series对象,其中每个字符串的首字母被大写化,其余字母则转为小写。

304-5、说明

        无

304-6、用法
304-6-1、数据准备
304-6-2、代码示例
  1. # 304、pandas.Series.str.capitalize方法
  2. # 304-1、基本使用
  3. import pandas as pd
  4. # 创建包含字符串的Series
  5. string_series = pd.Series(['hello world', 'python programming', 'data science'])
  6. # 首字母大写
  7. capitalized_series = string_series.str.capitalize()
  8. print(capitalized_series, end='\n\n')
  9. # 304-2、处理含有多单词的字符串
  10. import pandas as pd
  11. # 创建包含多单词字符串的Series
  12. string_series = pd.Series(['machine learning', 'deep learning', 'natural language processing'])
  13. # 首字母大写
  14. capitalized_series = string_series.str.capitalize()
  15. print(capitalized_series, end='\n\n')
  16. # 304-3、处理不同类型的字符串
  17. import pandas as pd
  18. # 创建包含各种字符串的 Series
  19. string_series = pd.Series(['123abc', 'FOO', 'bar123'])
  20. # 首字母大写
  21. capitalized_series = string_series.str.capitalize()
  22. print(capitalized_series)
304-6-3、结果输出
  1. # 304、pandas.Series.str.capitalize方法
  2. # 304-1、基本使用
  3. # 0 Hello world
  4. # 1 Python programming
  5. # 2 Data science
  6. # dtype: object
  7. # 304-2、处理含有多单词的字符串
  8. # 0 Machine learning
  9. # 1 Deep learning
  10. # 2 Natural language processing
  11. # dtype: object
  12. # 304-3、处理不同类型的字符串
  13. # 0 123abc
  14. # 1 Foo
  15. # 2 Bar123
  16. # dtype: object
305、pandas.Series.str.casefold方法
305-1、语法
  1. # 305、pandas.Series.str.casefold方法
  2. pandas.Series.str.casefold()
  3. Convert strings in the Series/Index to be casefolded.
  4. Equivalent to str.casefold().
  5. Returns:
  6. Series or Index of object
305-2、参数

        无

305-3、功能

        用于将字符串中的每个元素转换为小写形式,具备更强的Unicode比较能力,它在文本处理时提供了一种比常规小写转换更为强大的方法,尤其是在处理不同语言和区域的字符时

305-4、返回值

        返回一个新的Series对象,其中每个字符串元素都被转换为小写,适用于多种语言字符。

305-5、说明

        无

305-6、用法
305-6-1、数据准备
305-6-2、代码示例
  1. # 305、pandas.Series.str.casefold方法
  2. # 305-1、基本使用
  3. import pandas as pd
  4. # 创建包含字符串的Series
  5. string_series = pd.Series(['Hello World', 'Python Programming', 'Data Science'])
  6. # 使用casefold转换为小写
  7. casefolded_series = string_series.str.casefold()
  8. print(casefolded_series, end='\n\n')
  9. # 305-2、处理特殊字符
  10. import pandas as pd
  11. # 创建包含特殊字符的Series
  12. string_series = pd.Series(['Sträßchen', 'ß', 'Öl', 'Äpfel'])
  13. # 使用casefold转换为小写
  14. casefolded_series = string_series.str.casefold()
  15. print(casefolded_series, end='\n\n')
305-6-3、结果输出
  1. # 305、pandas.Series.str.casefold方法
  2. # 305-1、基本使用
  3. # 0 hello world
  4. # 1 python programming
  5. # 2 data science
  6. # dtype: object
  7. # 305-2、处理特殊字符
  8. # 0 strässchen
  9. # 1 ss
  10. # 2 öl
  11. # 3 äpfel
  12. # dtype: object

二、推荐阅读

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

闽ICP备14008679号