Pandas Series.nunique() 函数

Python Pandas Series.nunique()方法计算 Python Pandas Series 中的唯一值。

pandas.Series.nunique() 语法

Series.nunique(dropna=True)

参数

dropna 默认为 True
如果为 True,则 NaN 被排除在外;如果为 False,则 NaN 也被计算在内

返回值

它返回一个整数,计算调用者 Pandas Series 中的唯一值。

示例代码:Series.nunique() 方法

import pandas as pd
import numpy as np
ser = pd.Series([1, 2, 3, np.nan, 3, 4, np.nan],
               name = 'No.')
print(ser.nunique())

输出:

4

调用者 Series 除了 NaN 外有 4 个唯一的值–[1, 2, 3, 4],因此 Series.nunique() 方法返回 4,因为 NaN 被默认排除在外。

示例代码: Series.nunique() 方法的 dropna=False

import pandas as pd
import numpy as np
ser = pd.Series([1, 2, 3, np.nan, 3, 4, np.nan],
               name = 'No.')
print(ser.nunique(dropna=False))

输出:

5

dropnaFalse 时,Series.nunique() 方法也计入 NaN

Pandas Series.value_counts() 函数

pandas.Series.value_counts() 方法计算 Series 中每个独特元素的出现次数。

pandas.Series.value_counts() 语法

Series.value_counts(normalize=False,
                    sort=True,
                    ascending=False,
                    bins=None,
                    dropna=True)

参数

normalize 布尔型。唯一值的相对频率(normalize=True)或唯一值的绝对频率(normalize=False)
sort 布尔型。根据频率对元素进行排序(sort=True)或不对系列对象进行排序(sort=False)
ascending 布尔型。按升序(ascending=True)或降序(ascending=False)排序
bins 整数。Series 对象的数值范围被划分的分区数
dropna 布尔型。包括 NaN(dropna=False)的计数或不包括 NaN(dropna=True)的计数

返回值

它返回一个由唯一值的计数组成的 Series 对象。

示例代码:使用 Series.value_counts() 方法计算 Pandas Series 中唯一元素的频率

import pandas as pd
import numpy as np
df = pd.DataFrame({'X': [1, 2, 3, np.nan, 3],
                   'Y': [4, np.nan, 8, np.nan, 3]})
print("DataFrame:")
print(df)
absolute_counts=df["X"].value_counts()
print("Frequencies of elements of X column:")
print(absolute_counts)

输出:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0
Frequencies of elements of X column:
3.0    2
2.0    1
1.0    1
Name: X, dtype: int64

Series 对象 absolute_counts 使用 Series.value_counts() 方法给出了列 X 中每个独特元素的计数。

Series.value_counts() 默认不统计 NaN。我们将在下面的章节中介绍如何计算它。

示例代码:在 Series.value_counts() 方法中设置 normalize=True 来获得元素的相对频率

如果我们在 Series.value_counts() 方法中设置 normalize=True,就可以得到 Series 对象中所有独特元素的相对频率。

import pandas as pd
import numpy as np
df = pd.DataFrame({'X': [1, 2, 3, np.nan, 3],
                   'Y': [4, np.nan, 8, np.nan, 3]})
print("DataFrame:")
print(df)
relative_counts=df["X"].value_counts(normalize=True)
print("Relative Frequencies of elements of X column:")
print(relative_counts)

输出:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0
Frequencies of elements of X column:
3.0    0.50
2.0    0.25
1.0    0.25
Name: X, dtype: float64

Series 对象 relative_counts 给出了列 X 中每个独特元素的相对频率。

相对频率是由所有绝对频率除以绝对频率之和得到的。

示例代码:在 Series.value_counts() 方法中设置 ascending=True,根据频率值按升序排列元素

如果我们在 Series.value_counts() 方法中设置 ascending=True,就会得到 Series 对象,其元素根据频率值按升序排序。

默认情况下,从 Series.value_counts() 方法返回的 Series 对象中的值是根据频率值降序排序的。

import pandas as pd
import numpy as np
df = pd.DataFrame({'X': [1, 2, 3, np.nan, 3],
                   'Y': [4, np.nan, 8, np.nan, 3]})
print("DataFrame:")
print(df)
sorted_counts=df["X"].value_counts(ascending=True)
print("Frequencies of elements of X column:")
print(sorted_counts)

输出:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0
Frequencies of elements of X column:
1.0    1
2.0    1
3.0    2
Name: X, dtype: int64

它给出了 X 列中每个唯一对象的计数,频率值按升序排列。

示例代码:在 Series.value_counts() 方法中设置 bins 参数,获得位于半开分区的值的计数

import pandas as pd
import numpy as np
df = pd.DataFrame({'X': [1, 2, 3, np.nan, 3, 4, 5],
                   'Y': [4, np.nan, 8, np.nan, 3, 2, 1]})
print("DataFrame:")
print(df)
counts=df["X"].value_counts(bins=3)
print("Frequencies:")
print(counts)

输出:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0
5  4.0  2.0
6  5.0  1.0
Frequencies:
(3.667, 5.0]      2
(2.333, 3.667]    2
(0.995, 2.333]    2
Name: X, dtype: int64

它将 Series,即 X 列中的数值范围分为三部分,并返回每个半开区间中的数值计数。

示例代码:在 Series.value_counts() 方法中设置 dropna=FalseNaN 计数

如果我们在 Series.value_counts() 方法中设置 dropna=False,我们也会得到 NaN 值的计数。

import pandas as pd
import numpy as np
df = pd.DataFrame({'X': [1, 2, 3, np.nan, 3],
                   'Y': [4, np.nan, 8, np.nan, 3]})
print("DataFrame:")
print(df)
counts=df["Y"].value_counts(dropna=False)
print("Frequencies:")
print(counts)

输出:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0
Frequencies:
NaN    2
3.0    1
8.0    1
4.0    1
Name: Y, dtype: int64

它给出了 DataFrameY 列中每个元素的数量与 NaN 值的数量。

Pandas read_csv()函数

Pandas read_csv() 方法将指定的 CSV 文件读取到 DataFrame 中。

pandas.read_csv() 语法

pandas.read_csv(filepath_or_buffer: Union[str, pathlib.Path, IO[~ AnyStr]],
                sep=',',
                delimiter=None,
                header='infer',
                names=None,
                index_col=None,
                usecols=None,
                squeeze=False,
                prefix=None,
                mangle_dupe_cols=True,
                dtype=None,
                engine=None,
                converters=None,
                true_values=None,
                false_values=None,
                skipinitialspace=False,
                skiprows=None,
                skipfooter=0,
                nrows=None,
                na_values=None,
                keep_default_na=True,
                na_filter=True,
                verbose=False,
                skip_blank_lines=True,
                parse_dates=False,
                infer_datetime_format=False,
                keep_date_col=False,
                date_parser=None,
                dayfirst=False,
                cache_dates=True,
                iterator=False,
                chunksize=None,
                compression='infer',
                thousands=None,
                decimal: str = '.',
                lineterminator=None,
                quotechar='"',
                quoting=0,
                doublequote=True,
                escapechar=None,
                comment=None,
                encoding=None,
                dialect=None,
                error_bad_lines=True,
                warn_bad_lines=True,
                delim_whitespace=False,
                low_memory=True,
                memory_map=False,
                float_precision=None)

参数

filepath_or_buffer 要导入的 CSV 文件的位置
delimiter 用于解析 CSV 文件内容的定界符
usecols 从 CSV 文件中形成 DataFrame 时,只包含列名。
header 哪一行/几行作为标题的列名
squeeze 如果解析的数据只包含一列,则返回 Pandas Series
skiprows 跳过哪一行/几行

返回值

由带有标签轴的 CSV 文件形成的 Dataframe。

示例代码:Pandas 使用 pandas.read_csv() 函数读取 CSV 文件

import pandas as pd
df = pd.read_csv("dataset.csv")
print(df)

输出:

       Country      Item Type Sales Channel Order Priority
0       Tuvalu      Baby Food       Offline              H
1   East Timor           Meat        Online              L
2       Norway      Baby Food        Online              L
3     Portugal      Baby Food        Online              H
4     Honduras         Snacks        Online              L
5  New Zealand         Fruits        Online              H
6     Moldova   Personal Care        Online              L

该方法将 CSV 文件加载到 DataFrame 中。在这里,我们可以使用绝对路径和相对路径来提供一个文件路径作为 pandas.read_csv() 函数的参数。

在这种情况下,dataset.csv 与程序文件在同一目录下,这意味着可以使用 CSV 文件名作为文件路径。

示例代码:在 pandas.read_csv() 函数中设置 usecols 参数

import pandas as pd
df = pd.read_csv("dataset.csv",usecols=["Country","Sales Channel","Order Priority"])
print(df)

输出:

       Country Sales Channel Order Priority
0       Tuvalu       Offline              H
1   East Timor        Online              L
2       Norway        Online              L
3     Portugal        Online              H
4     Honduras        Online              L
5  New Zealand        Online              H
6     Moldova         Online              L

该案例通过只在 usecols 参数中包含指定的列,将 CSV 文件加载到 DataFrame 中。

CountrySales ChannelOrder Priority 这几列只作为参数传递,所以它们只被包含在 DataFrame 中。

示例代码:带有表头的 pandas.read_csv() 函数

import pandas as pd
df = pd.read_csv("dataset.csv",header=1)
print(df)

输出:

        Tuvalu      Baby Food Offline  H
0   East Timor           Meat  Online  L
1       Norway      Baby Food  Online  L
2     Portugal      Baby Food  Online  H
3     Honduras         Snacks  Online  L
4  New Zealand         Fruits  Online  H
5     Moldova   Personal Care  Online  L

该过程通过将第 1 行设置为 header,将 CSV 文件加载到 DataFrame 中。

这里,第 1 行元素作为整个 DataFrame 的列名。

示例代码: 具有跳行的 pandas.read_csv() 函数

import pandas as pd
df = pd.read_csv("dataset.csv",skiprows=3)
print(df)

输出:

        Norway      Baby Food  Online  L
0     Portugal      Baby Food  Online  H
1     Honduras         Snacks  Online  L
2  New Zealand         Fruits  Online  H
3     Moldova   Personal Care  Online  L

这个过程通过跳过前 3 行将 CSV 文件加载到 DataFrame 中。

Pandas DataFrame DataFrame.shift() 函数

Pandas DataFrame.shift 方法用于将 DataFrame 的索引按指定的周期数移位,时间频率可选。

pandas.DataFrame.shift() 语法

 DataFrame.shift(periods=1,
                 freq=None,
                 axis=0,
                 fill_value=None)

参数

periods 整数。决定移动索引的周期数,可以是负数,也可以是正数
freq DateOffsettseries.offsetstimedeltastr。可选参数,用于在不调整数据的情况下移动索引值
axis 沿着行(axis=0)或列(axis=1)移动
fill_value 用于新引入的缺失值的标量值

返回值

它返回一个带有移位索引值的 DataFrame 对象。

示例代码:DataFrame.shift() 函数沿行移动

import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)
shifted_df=df.shift(periods=1)
print("Shifted DataFrame")
print(shifted_df)

输出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Shifted DataFrame
     X    Y
0  NaN  NaN
1  1.0  4.0
2  2.0  1.0

这里,我们将 periods 的值设置为 1,这将使 DataFrame 的行从顶部向底部移动 1 个单位。

在向底部移动的同时,最上面的行成为空缺,默认由 NaN 值填充。

如果我们想将行从底部向顶部移动,我们可以将 periods 参数设置为负值。

import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)
shifted_df=df.shift(periods=-2)
print("Shifted DataFrame")
print(shifted_df)

输出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Shifted DataFrame
     X    Y
0  3.0  8.0
1  NaN  NaN
2  NaN  NaN

它将行从底部向顶部移动,周期为 2

示例代码:DataFrame.shift() 函数沿列移动

如果我们想移动沿列轴移动,我们在 shift() 方法中设置 axis=1

import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)
shifted_df=df.shift(periods=1,axis=1)
print("Shifted DataFrame")
print(shifted_df)

输出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Shifted DataFrame
    X    Y
0 NaN  1.0
1 NaN  2.0
2 NaN  3.0

在这里,我们将 periods 的值设置为 1,这将使 DataFrame 的列轴从左向右移动 1 个单位。

如果我们想将列轴从右向左移动,我们为 periods 参数设置一个负值。

import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)
shifted_df=df.shift(periods=-1,axis=1)
print("Shifted DataFrame")
print(shifted_df)

输出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Shifted DataFrame
     X   Y
0  4.0 NaN
1  1.0 NaN
2  8.0 NaN

它将列轴从右向左移动了 1 个周期。

示例代码:DataFrame.shift 方法,参数为 fill_value

在前面的例子中,移位后的缺失值默认用 NaN 来填充,我们也可以通过使用 fill_value 参数用其他值而不是 NaN 来填充。我们也可以通过使用 fill_value 参数用其他值而不是 NaN 来填充缺失值。

import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)
shifted_df=df.shift(periods=-1,
                    axis=1,
                    fill_value=4)
print("Shifted DataFrame")
print(shifted_df)

输出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Shifted DataFrame
   X  Y
0  4  4
1  1  4
2  8  4

它将所有由 shift() 方法创建的缺失值用 4 填充。

Python numpy.average() 函数

NumPy 库提供的几个函数被广泛用于在 Python 编码时帮助不同领域。其中之一是 numpy.average() 函数,这将是本文的重点。

本教程讨论了 numpy.average() 函数以及如何借助 NumPy 库在 Python 中实现它。

Python numpy.average() 函数

numpy.average() 函数,顾名思义,是 NumPy 库提供的函数列表下的功能,这是一个重要且流行的库,可以轻松处理数字并对其执行某些操作.

简单来说,numpy.average() 函数用于计算某个类数组结构沿需要指定的轴的加权平均值。

numpy.average() 的语法及其参数已在下面提到和解释,以便于读者理解。

numpy.average(a, axis=None, weights=None, returned=False, *, keepdims=<no value>)

与此功能相关的参数将在下面进一步说明。

  1. a – 它是函数将在其上运行的对象。在这种情况下,它是一个类似数组的结构。如果没有,可能会尝试自动转换过程。
  2. axis – 必须沿其计算平均值的一个或多个轴在此参数中指定/存储。
  3. weights – 一个类似于 a 大小的数组,分别包含数组 a 中元素的权重。
  4. 参数 returnedkeepdims 是可选的,与此代码中的示例无关。但是,对于好奇的读者来说,两者都可以在互联网上轻松找到。

在 Python 中实现 numpy.average() 函数

实现 numpy.average() 函数很简单,初学者很容易理解。

以下代码实现了 numpy.average() 函数。

import numpy as np
a = [10,20,30,80]
b = np.average(a)
print(b)

上面的代码提供了以下输出。

35.0

numpy.mean() 函数的比较

乍一看,numpy.average() 函数和 numpy.mean() 函数看起来执行相同的任务,在一般数字场景中,它们甚至提供相同的结果。

让我们以上面的例子计算列表的平均值和平均值。

import numpy as np
a = [10,20,30,80]
b = np.average(a)
c = np.mean(a)
print(b)
print(c)

上面的代码提供了以下输出。

35.0
35.0

但是,这两者也有其独特的作用,这使得它们彼此不同。

numpy.average() 函数包含一个 weight 参数,可以计算给定指定类数组结构的加权平均值; numpy.mean() 函数中缺少此功能。

此外,numpy.mean() 函数有一个 dtype 参数,这使得它可以用于使函数不仅适用于数字,而且适用于可能传递给函数的任何模棱两可的对象。另一方面,numpy.average() 函数缺少此功能,仅适用于整数。

我们还应该注意,numpy.mean() 函数将掩码考虑在内,这意味着借助此函数计算的平均值仅考虑未掩码的值。然而,numpy.average() 不包含掩码的概念。

PHP Base64_decode 函数

PHP base64_decode 函数将字符串转换为长纯文本,然后与用户定义值集的主函数一起发送。

base64_decode() 是 php 的内置函数,最常用于网络上的邮件功能。

函数语法:

string base64_decode( $string, $strict)

它需要两个参数。

  1. $string – 用于存储编码数据,是必须的。
  2. $strict – 虽然此参数不像前者那样是强制性的,但当它设置为 TRUE, 时,base64_decode 将返回 FALSE,前提是它的输入包含函数字母表以外的数据。否则,无效数据将被自动丢弃。

返回值:

base64 解码函数在失败的情况下返回 FALSE,并可能返回二进制值。

PHP Base64_decode 函数示例代码 1

<?php
    $string = base64_encode ('Your string values are encoded');
    echo "1.Here is the encoded function value in a machine readable format = ".$string ."<br>";
    echo "2.The function decodes the formerly encoded string value" ."<br>" .base64_decode($string);
?>

输出:

1.Here is the encoded function value in a machine readable
format = WW91ciBzdHJpbmcgdmFsdWVzIGFyZSBlbmNvZGVk
2. The function decodes the formerly encoded string value
Your string values are encoded.

示例代码显示了 base64_decode() 函数如何在一个简单的场景中工作。

为了对编码数据进行解码,程序为变量赋值,然后与解码函数一起使用。

而输出表明 base64_decode() 如何将数据转换回用户可读格式。

PHP Base64_decode 函数示例代码 2

<?php
//The following variable is assigned with a string set
    $string = "HELLO--こんにちは--你好";
//string contains bilingual text
//base64 is used to encode the data first into the $enco variable
    $enco = base64_encode ($string);
//finally the base64_decode functionis used to decode the encoded value
    $deco = base64_decode ($enco);
    echo $deco;
?>

输出:

HELLO--こんにちは--你好