当前位置:   article > 正文

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

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

目录

一、用法精讲

71、pandas.tseries.api.guess_datetime_format函数

71-1、语法

71-2、参数

71-3、功能

71-4、返回值

71-5、说明

71-6、用法

71-6-1、数据准备

71-6-2、代码示例

71-6-3、结果输出

72、pandas.util.hash_array函数

72-1、语法

72-2、参数

72-3、功能

72-4、返回值

72-5、说明

72-6、用法

72-6-1、数据准备

72-6-2、代码示例

72-6-3、结果输出 

73、pandas.util.hash_pandas_object函数

73-1、语法

73-2、参数

73-3、功能

73-4、返回值

73-5、说明

73-6、用法

73-6-1、数据准备

73-6-2、代码示例

73-6-3、结果输出

二、推荐阅读

1、Python筑基之旅

2、Python函数之旅

3、Python算法之旅

4、Python魔法之旅

5、博客个人主页

一、用法精讲

71、pandas.tseries.api.guess_datetime_format函数
71-1、语法
  1. # 71、pandas.tseries.api.guess_datetime_format函数
  2. pandas.tseries.api.guess_datetime_format(dt_str, dayfirst=False)
  3. Guess the datetime format of a given datetime string.
  4. Parameters:
  5. dt_strstr
  6. Datetime string to guess the format of.
  7. dayfirstbool, default False
  8. If True parses dates with the day first, eg 20/01/2005
  9. Warning
  10. dayfirst=True is not strict, but will prefer to parse with day first (this is a known bug).
  11. Returns:
  12. str or None
  13. ret
  14. datetime format string (for strftime or strptime), or None if it can’t be guessed.
71-2、参数

71-2-1、dt_str(必须)一个或多个日期时间字符串,函数将尝试从这些字符串中猜测出日期时间的格式,如果传入的是列表,函数会尝试从列表中第一个非空字符串进行猜测。

71-2-2、dayfirst(可选,默认值为False)用于控制日期时间字符串中日和月的顺序,如果设置为True,则假定日期字符串中的第一个数字是日(DD/MM/YYYY),如果设置为False(默认值),则假定第一个数字是月(MM/DD/YYYY),这个参数对于解析一些可能具有不同日/月顺序的日期时间字符串非常有用。

71-3、功能

        用于猜测给定日期时间字符串(dt_str)的格式的一个实用工具。

71-4、返回值

        返回值是一个字符串,表示猜测到的日期时间格式,这个格式字符串遵循Pandas接受的日期时间格式约定,通常与Python的datetime.strptime和datetime.strftime方法兼容。

71-5、说明

        该函数可能在未来的Pandas版本中被弃用或更改。在较新版本的Pandas中,你可能更倾向于使用pandas.to_datetime函数,它也有一个infer_datetime_format参数,虽然它的行为可能与guess_datetime_format略有不同。

71-6、用法
71-6-1、数据准备
71-6-2、代码示例
  1. # 71、pandas.tseries.api.guess_datetime_format函数
  2. import pandas as pd
  3. dt_str = '2024-07-17'
  4. format_guess = pd.tseries.api.guess_datetime_format(dt_str)
  5. print(format_guess)
71-6-3、结果输出
  1. # 71、pandas.tseries.api.guess_datetime_format函数
  2. # %Y-%m-%d
72、pandas.util.hash_array函数
72-1、语法
  1. # 72、pandas.util.hash_array函数
  2. pandas.util.hash_array(vals, encoding='utf8', hash_key='0123456789123456', categorize=True)
  3. Given a 1d array, return an array of deterministic integers.
  4. Parameters:
  5. vals
  6. ndarray or ExtensionArray
  7. encoding
  8. str, default ‘utf8’
  9. Encoding for data & key when strings.
  10. hash_key
  11. str, default _default_hash_key
  12. Hash_key for string key to encode.
  13. categorize
  14. bool, default True
  15. Whether to first categorize object arrays before hashing. This is more efficient when the array contains duplicate values.
  16. Returns:
  17. ndarray[np.uint64, ndim=1]
  18. Hashed values, same length as the vals.
72-2、参数

72-2-1、vals(必须)表示需要被哈希处理的输入数组,函数会遍历这个数组中的每个元素,并对其进行哈希处理。

72-2-2、encoding(可选,默认值为'utf8')指定数组中字符串元素的编码方式,如果数组中包含字符串,则这些字符串会根据此编码方式被转换为字节序列,然后再进行哈希处理。

72-2-3、hash_key(可选,默认值为'0123456789123456')提供了一个额外的密钥,用于在哈希过程中增加随机性,通过在哈希函数中加入这个密钥,可以增加哈希值的复杂性和安全性,尤其是在需要防止哈希碰撞的场景中。

72-2-4、categorize(可选,默认值为True)当此参数为True时,函数会首先尝试将输入数组中的元素分类(即,将相同的元素映射到相同的整数标签上),然后再对这些整数标签进行哈希处理,这可以在一定程度上减少哈希碰撞的可能性,并提高哈希过程的效率。如果输入数组已经是分类类型(Categorical dtype),则此参数的效果会更加明显。

72-3、功能

        给定一个一维数组(如NumPy数组或Pandas Series),返回该数组中每个元素的哈希值所组成的数组。

72-4、返回值

        返回一个与输入数组形状相同的一维NumPy数组,但其中的元素已被替换为对应元素的哈希值,这些哈希值是uint64类型的整数,它们代表了输入数组中每个元素的唯一(或尽可能唯一)标识符。

72-5、说明

        无

72-6、用法
72-6-1、数据准备
72-6-2、代码示例
  1. # 72、pandas.util.hash_array函数
  2. import pandas as pd
  3. # 创建一个包含字符串的Series
  4. s = pd.Series(['Jimmy', 'Bryce', 'Myelsa'])
  5. # 计算每个字符串的哈希值
  6. hashed_values = pd.util.hash_array(s.values)
  7. # 输出哈希值数组
  8. print(hashed_values)
72-6-3、结果输出 
  1. # 72、pandas.util.hash_array函数
  2. # [1382347394209841164 9798869407607568009 6426393181695770081]
73、pandas.util.hash_pandas_object函数
73-1、语法
  1. # 73、pandas.util.hash_pandas_object函数
  2. pandas.util.hash_pandas_object(obj, index=True, encoding='utf8', hash_key='0123456789123456', categorize=True)
  3. Return a data hash of the Index/Series/DataFrame.
  4. Parameters:
  5. obj
  6. Index, Series, or DataFrame
  7. index
  8. bool, default True
  9. Include the index in the hash (if Series/DataFrame).
  10. encoding
  11. str, default ‘utf8’
  12. Encoding for data & key when strings.
  13. hash_key
  14. str, default _default_hash_key
  15. Hash_key for string key to encode.
  16. categorize
  17. bool, default True
  18. Whether to first categorize object arrays before hashing. This is more efficient when the array contains duplicate values.
  19. Returns:
  20. Series of uint64, same length as the object.
73-2、参数

73-2-1、obj(必须)要进行哈希处理的Pandas对象(DataFrame或Series)。

73-2-2、index(可选,默认值为True)布尔值,指定是否将对象的索引也纳入哈希计算中。如果为True,则对象的索引也会被哈希处理;如果为False,则只考虑对象的数据部分。

73-2-3、encoding(可选,默认值为'utf8')字符串,用于指定在哈希处理过程中如何编码字符串类型的数据,这在处理包含非ASCII字符的数据时特别有用。

73-2-4、hash_key(可选,默认值为'0123456789123456')字符串,一个盐值(salt),用于增加哈希值的唯一性,通过添加这个盐值,即使两个Pandas对象在数据上完全相同,它们的哈希值也可能因为盐值的不同而不同,这有助于防止哈希碰撞,并提高哈希值的安全性。

73-2-5、categorize(可选,默认值为True)布尔值,如果为True,则在哈希处理之前,函数会尝试将对象中的分类数据(如pandas的Categorical类型)转换为整数编码,这样可以提高哈希处理的效率和一致性;如果为False,则直接使用原始数据进行哈希处理。

73-3、功能

        用于对Pandas对象(如DataFrame或Series)进行哈希处理,该函数对于需要将Pandas对象转换为哈希值以便进行快速比较或作为字典键等场景非常有用。

73-4、返回值

        函数返回一个NumPy数组,其中包含了对象中每一行(或元素,对于Series)的哈希值,这些哈希值可以用于比较、索引或其他需要唯一标识符的场景。

73-5、说明

73-5-1、快速比较:通过比较两个Pandas对象的哈希值,可以快速判断它们是否完全相同(注意,哈希冲突的可能性极低,但理论上存在)。

73-5-2、作为字典键:将Pandas对象哈希处理后,可以使用哈希值作为字典的键,以便快速查找或更新数据。

73-5-3、数据去重:在处理大量数据时,可以使用哈希值来识别并删除重复的行或记录。

73-6、用法
73-6-1、数据准备
73-6-2、代码示例
  1. # 73、pandas.util.hash_pandas_object函数
  2. # 73-1、对DataFrame进行哈希处理
  3. import pandas as pd
  4. # 创建一个简单的DataFrame
  5. df = pd.DataFrame({
  6. 'A': [1, 2, 3],
  7. 'B': ['a', 'b', 'c'],
  8. 'C': [True, False, True]
  9. })
  10. # 对DataFrame进行哈希处理,包括索引
  11. hashes = pd.util.hash_pandas_object(df, index=True)
  12. print("Hashes with index included:", hashes)
  13. # 对DataFrame进行哈希处理,不包括索引
  14. hashes_no_index = pd.util.hash_pandas_object(df, index=False)
  15. print("Hashes without index:", hashes_no_index, end='\n\n')
  16. # 73-2、对Series进行哈希处理
  17. import pandas as pd
  18. # 创建一个 Series
  19. s = pd.Series([1, 2, 3, 4, 5])
  20. # 对 Series 进行哈希处理
  21. series_hashes = pd.util.hash_pandas_object(s)
  22. print("Hashes for Series:", series_hashes)
  23. # 注意:对于Series,通常没有索引(除非明确指定),但你可以通过reset_index()将其转换为DataFrame并包含索引
  24. s_df = s.reset_index(drop=False)
  25. s_df_hashes_with_index = pd.util.hash_pandas_object(s_df)
  26. print("Hashes for Series as DataFrame with index:", s_df_hashes_with_index, end='\n\n')
  27. # 73-3、处理包含浮点数的DataFrame
  28. import pandas as pd
  29. # 创建一个包含浮点数的DataFrame
  30. df_floats = pd.DataFrame({
  31. 'A': [1.0, 2.0, 3.0000000000001], # 注意最后一个数有微小的精度差异
  32. 'B': [4.0, 5.0, 6.0]
  33. })
  34. # 对DataFrame进行哈希处理
  35. floats_hashes = pd.util.hash_pandas_object(df_floats)
  36. print("Hashes for DataFrame with floats:", floats_hashes, end='\n\n')
  37. # 注意:由于浮点数的精度问题,即使 '3.0' 和 '3.0000000000001' 在数值上接近,它们的哈希值也可能不同
  38. # 73-4、对包含分类数据的DataFrame进行哈希处理
  39. import pandas as pd
  40. # 创建一个包含分类数据的DataFrame
  41. df_categorical = pd.DataFrame({
  42. 'A': pd.Categorical(['a', 'b', 'a', 'c']),
  43. 'B': [1, 2, 3, 4]
  44. })
  45. # 对DataFrame进行哈希处理,包括分类数据的整数编码
  46. categorical_hashes = pd.util.hash_pandas_object(df_categorical, categorize=True)
  47. print("Hashes with categorical data (categorize=True):", categorical_hashes)
  48. # 如果categorize=False,则直接对分类对象的字符串表示进行哈希处理
  49. categorical_hashes_no_categorize = pd.util.hash_pandas_object(df_categorical, categorize=False)
  50. print("Hashes with categorical data (categorize=False):", categorical_hashes_no_categorize, end='\n\n')
  51. # 73-5、对包含时间戳的DataFrame进行哈希处理
  52. import pandas as pd
  53. # 创建一个包含时间戳的DataFrame
  54. df_timestamps = pd.DataFrame({
  55. 'Timestamp': pd.to_datetime(['2024-07-01', '2024-07-05', '2024-07-17'])
  56. })
  57. # 对DataFrame进行哈希处理
  58. timestamp_hashes = pd.util.hash_pandas_object(df_timestamps)
  59. print("Hashes for DataFrame with timestamps:", timestamp_hashes, end='\n\n')
  60. # 73-6、处理具有NaN值的DataFrame
  61. import pandas as pd
  62. # 创建一个包含NaN值的DataFrame
  63. df_nan = pd.DataFrame({
  64. 'A': [1, 2, None, 4],
  65. 'B': ['a', 'b', 'c', None]
  66. })
  67. # 对DataFrame进行哈希处理
  68. nan_hashes = pd.util.hash_pandas_object(df_nan)
  69. print("Hashes for DataFrame with NaN values:", nan_hashes, end='\n\n')
  70. # 注意:NaN 值会以某种方式影响哈希值,但具体方式取决于Pandas的内部实现
  71. # 73-7、对大型DataFrame进行哈希处理
  72. import pandas as pd
  73. import numpy as np
  74. # 创建一个大型DataFrame(这里仅作为示例,实际中可能更大)
  75. np.random.seed(0)
  76. large_df = pd.DataFrame({
  77. 'A': np.random.randint(0, 100, size=100000),
  78. 'B': np.random.choice(['a', 'b', 'c', 'd'], size=100000),
  79. 'C': np.random.rand(100000)
  80. })
  81. # 对大型DataFrame进行哈希处理(注意:这可能需要一些时间)
  82. large_hashes = pd.util.hash_pandas_object(large_df, index=False)
  83. print("Hashes for a large DataFrame (first 10):", large_hashes[:10])
73-6-3、结果输出
  1. # 73、pandas.util.hash_pandas_object函数
  2. # 73-1、对DataFrame进行哈希处理
  3. # Hashes with index included: 0 9483444313420146699
  4. # 1 5719781360446296993
  5. # 2 9877900052590456950
  6. # dtype: uint64
  7. # Hashes without index: 0 485995293390257589
  8. # 1 3005746743269222528
  9. # 2 15997040775864825588
  10. # dtype: uint64
  11. # 73-2、对Series进行哈希处理
  12. # Hashes for Series: 0 14639053686158035780
  13. # 1 3869563279212530728
  14. # 2 393322362522515241
  15. # 3 4080319230603510727
  16. # 4 13014484659661894915
  17. # dtype: uint64
  18. # Hashes for Series as DataFrame with index: 0 5967740633143088628
  19. # 1 9280677857880118003
  20. # 2 6253357580284104503
  21. # 3 4295247446495588871
  22. # 4 12355848007932281175
  23. # dtype: uint64
  24. # 73-3、处理包含浮点数的DataFrame
  25. # Hashes for DataFrame with floats: 0 12179765616421863049
  26. # 1 4850516111580897109
  27. # 2 13664998175358214438
  28. # dtype: uint64
  29. # 73-4、对包含分类数据的DataFrame进行哈希处理
  30. # Hashes with categorical data (categorize=True): 0 10448339489922407492
  31. # 1 328955597323365005
  32. # 2 17337560684877153397
  33. # 3 7837014030697196839
  34. # dtype: uint64
  35. # Hashes with categorical data (categorize=False): 0 10448339489922407492
  36. # 1 328955597323365005
  37. # 2 17337560684877153397
  38. # 3 7837014030697196839
  39. # dtype: uint64
  40. # 73-5、对包含时间戳的DataFrame进行哈希处理
  41. # Hashes for DataFrame with timestamps: 0 5029448861734248502
  42. # 1 15824968476515617805
  43. # 2 16154582340151959443
  44. # dtype: uint64
  45. # 73-6、处理具有NaN值的DataFrame
  46. # Hashes for DataFrame with NaN values: 0 390400230840112733
  47. # 1 9079939592730820628
  48. # 2 13397986763273461122
  49. # 3 18293157628943714066
  50. # dtype: uint64
  51. # 73-7、对大型DataFrame进行哈希处理
  52. # Hashes for a large DataFrame (first 10): 0 3741430234977074334
  53. # 1 13815252830947086855
  54. # 2 5536596816482122074
  55. # 3 7459333729972558407
  56. # 4 10226587178543578329
  57. # 5 16985416363548347045
  58. # 6 5210640794891753453
  59. # 7 334407979408579242
  60. # 8 3392106525313158311
  61. # 9 17317895163462122340
  62. # dtype: uint64

二、推荐阅读

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

闽ICP备14008679号