什么是Pandas

Pandas是一个在Python编程语言中广泛使用的开源数据分析和数据处理库。它提供了高效、灵活和易于使用的数据结构,特别适用于处理结构化和标签化数据。

Pandas的主要数据结构是DataFrame和Series。DataFrame是一个类似于电子表格或SQL表的二维数据结构,可以存储和处理具有不同数据类型的列。Series是一维标签化数组,类似于一列数据。使用这些数据结构,Pandas提供了许多功能强大的方法和函数,用于数据清洗、数据转换、数据筛选、数据分组、数据合并等数据操作任务。

Pandas具有许多功能,包括:

  1. 数据清洗和处理:Pandas提供了各种方法来处理缺失数据、重复数据、异常值等。它还提供了强大的数据转换功能,例如数据重塑、列添加和删除、数据排序等。
  2. 数据筛选和索引:Pandas允许根据条件从数据集中筛选数据,执行布尔索引和位置索引。这使得对数据进行子集选择和过滤变得非常方便。
  3. 数据分组和聚合:Pandas可以根据一列或多列的值对数据进行分组,并对分组后的数据执行聚合操作,如求和、平均值、最大值、最小值等。
  4. 数据合并和连接:Pandas提供了丰富的函数和方法来合并和连接不同数据集,包括数据库风格的合并(merge)操作、连接(join)操作以及拼接(concatenate)操作。
  5. 时间序列数据处理:Pandas对处理时间序列数据具有很好的支持,可以轻松处理日期和时间数据,执行重采样、频率转换、时区处理等操作。
  6. 数据可视化:Pandas结合了Matplotlib库,可以方便地进行数据可视化,绘制各种类型的图表,如折线图、柱状图、散点图等。

认识Series

Series是Pandas库中的一种数据结构,它表示带有标签的一维数组。可以将Series看作是由两个部分组成:索引(index)和值(value)。索引是标识数据的标签,值是实际存储的数据。

Series对象可以存储不同数据类型的数据,包括整数、浮点数、字符串等。它类似于NumPy中的一维数组,但与NumPy数组不同的是,Series可以使用自定义的索引来标识和访问数据。

下面是一个创建Series对象的示例:

import pandas as pd

# 创建一个Series对象
s = pd.Series([3, 5, 1, 8, 2])

print(s)

输出结果为:

0    3
1    5
2    1
3    8
4    2
dtype: int64

在上面的例子中,我们传递了一个包含整数的Python列表来创建Series对象。默认情况下,Pandas会自动为Series对象生成整数索引(从0开始)。在输出结果中,左侧的数字表示索引,右侧的数字表示对应的值。

可以通过自定义索引来创建Series对象,如下所示:

import pandas as pd

# 创建一个带有自定义索引的Series对象
s = pd.Series([3, 5, 1, 8, 2], index=['a', 'b', 'c', 'd', 'e'])

print(s)

输出结果为:

a    3
b    5
c    1
d    8
e    2
dtype: int64

在这个例子中,我们通过传递一个字符串列表作为索引参数来创建Series对象。每个值都与相应的索引标签相关联。

通过使用自定义索引,Series对象可以像字典一样使用。可以通过索引标签访问和操作Series中的元素。此外,Series对象还支持许多内置方法和函数,用于数据的统计、筛选、排序等操作。

总结来说,Series是Pandas中的一维标签化数组,可以存储不同类型的数据。它提供了一种灵活而方便的方式来处理一维数据,并具有丰富的功能和方法。

Series如何增加元素

要向Pandas的Series对象中添加元素,可以使用索引标签进行赋值操作或使用Pandas提供的方法来追加新的元素。

下面是两种常见的向Series对象中添加元素的方法:

  1. 通过索引标签赋值: 可以使用索引标签来添加新元素并为其赋值。如果指定的索引标签不存在,Pandas会自动创建新的索引并添加元素。
import pandas as pd

# 创建一个空的Series对象
s = pd.Series()

# 添加新元素并赋值
s['a'] = 3
s['b'] = 5
s['c'] = 1

print(s)

输出结果为:

a    3
b    5
c    1
dtype: int64

在上面的例子中,我们首先创建了一个空的Series对象,然后使用索引标签['a']['b']['c']分别为其添加了新元素,并为每个元素赋予了相应的值。

  1. 使用Pandas提供的方法追加元素: Pandas提供了append()方法,可以用于将另一个Series对象追加到当前的Series对象末尾,从而增加元素。
import pandas as pd

# 创建一个Series对象
s1 = pd.Series([3, 5, 1])
s2 = pd.Series([8, 2])

# 使用append()方法追加元素
s = s1.append(s2)

print(s)

输出结果为:

0    3
1    5
2    1
0    8
1    2
dtype: int64

在这个例子中,我们首先创建了两个Series对象s1s2,然后使用s1.append(s2)s2追加到s1的末尾,形成一个新的Series对象s

需要注意的是,通过追加方法创建的新Series对象会重新索引,以确保每个元素都有唯一的索引值。

Series如何删除元素

要从Pandas的Series对象中删除元素,可以使用drop()方法或使用Python的del语句来删除指定的索引标签。

下面是两种常见的从Series对象中删除元素的方法:

  1. 使用drop()方法删除指定索引的元素: drop()方法可以删除指定索引的元素,并返回一个新的Series对象,不影响原始Series对象。
import pandas as pd

# 创建一个Series对象
s = pd.Series([3, 5, 1, 8, 2], index=['a', 'b', 'c', 'd', 'e'])

# 使用drop()方法删除指定索引的元素
s_new = s.drop('c')

print(s_new)

输出结果为:

a    3
b    5
d    8
e    2
dtype: int64

在上面的例子中,我们创建了一个Series对象s,然后使用drop('c')删除了索引为'c'的元素,并将结果保存到s_new中。

需要注意的是,drop()方法并不会改变原始的Series对象s,而是返回一个删除指定索引后的新Series对象s_new

  1. 使用del语句删除指定索引的元素: del语句是Python的内置语法,可以用来删除变量或对象。对于Series对象,可以使用del语句删除指定的索引标签。
import pandas as pd

# 创建一个Series对象
s = pd.Series([3, 5, 1, 8, 2], index=['a', 'b', 'c', 'd', 'e'])

# 使用del语句删除指定索引的元素
del s['c']

print(s)

输出结果为:

a    3
b    5
d    8
e    2
dtype: int64

在上面的例子中,我们创建了一个Series对象s,然后使用del s['c']删除了索引为'c'的元素。

drop()方法不同,del语句会直接修改原始的Series对象s,删除指定的索引元素。

Series如何修改和访问元素

要修改和访问Pandas的Series对象中的元素,可以使用索引标签或位置索引来进行操作。

下面是修改和访问Series对象元素的几种常见方法:

  1. 通过索引标签访问和修改元素: 可以使用索引标签来访问和修改Series对象中的元素。
import pandas as pd

# 创建一个Series对象
s = pd.Series([3, 5, 1, 8, 2], index=['a', 'b', 'c', 'd', 'e'])

# 访问元素
print(s['c'])

# 修改元素
s['c'] = 10

print(s)

输出结果为:

1
a     3
b     5
c    10
d     8
e     2
dtype: int64

在上面的例子中,我们首先创建了一个Series对象s,然后使用索引标签['c']访问了元素1,接着通过s['c'] = 10修改了元素的值为10

  1. 通过位置索引访问和修改元素: 可以使用位置索引(整数索引)来访问和修改Series对象中的元素。可以使用.iloc[]属性来进行位置索引的操作。
import pandas as pd

# 创建一个Series对象
s = pd.Series([3, 5, 1, 8, 2])

# 访问元素
print(s.iloc[2])

# 修改元素
s.iloc[2] = 10

print(s)

输出结果为:

1
0     3
1     5
2    10
3     8
4     2
dtype: int64

在上面的例子中,我们首先创建了一个Series对象s,然后使用位置索引2访问了元素1,接着通过s.iloc[2] = 10修改了元素的值为10

需要注意的是,使用位置索引时,索引的起始位置是0

这些是修改和访问Pandas的Series对象中元素的几种常见方法。您可以根据具体情况选择适合您的方式。

二维数据框DataFrame

DataFrame是Pandas库中最重要的数据结构之一,它是一个二维的表格型数据结构,可以存储和处理具有行索引和列索引的数据。DataFrame类似于电子表格或SQL表,提供了丰富的功能和方法来处理和分析结构化数据。

以下是一些关于DataFrame的重要特点和操作:

  1. 二维表格结构:DataFrame由行和列组成,行表示数据的观测值或样本,列表示数据的特征或变量。每列可以包含不同的数据类型,例如整数、浮点数、字符串等。
  2. 行索引和列索引:DataFrame具有行索引和列索引,可以通过索引标签来访问和操作数据。行索引提供了对行的标识和定位,而列索引则提供了对列的标识和定位。
  3. 灵活的数据操作:DataFrame提供了许多功能强大的方法和函数来处理数据,包括数据的增加、删除、修改、筛选、排序、分组、合并等。可以对整个DataFrame或单独的行、列进行操作。
  4. 数据对齐:DataFrame具有自动的数据对齐功能,当进行操作时,Pandas会自动对齐具有相同索引的数据。这样可以方便地进行数据合并、计算和处理。
  5. 缺失数据处理:DataFrame可以处理缺失数据(NaN或None),提供了丰富的方法来处理、填充或删除缺失数据,以便进行后续的数据分析和处理。
  6. 数据统计和描述:DataFrame提供了许多统计和描述性的方法,如求和、均值、标准差、最大值、最小值、计数等。可以对整个DataFrame或单独的行、列进行统计计算。
  7. 数据可视化:DataFrame结合了Matplotlib和其他绘图库,可以方便地进行数据可视化,绘制折线图、柱状图、散点图等各种图表。

通过使用DataFrame,可以方便地加载、处理和分析结构化数据,适用于各种数据科学和数据分析任务,如数据清洗、数据转换、数据筛选、数据聚合、数据可视化等。

创建DataFrame

要创建一个DataFrame对象,可以使用Pandas库提供的不同方法,例如传递字典、列表、NumPy数组等数据结构。下面是一些常见的创建DataFrame的方法:

  1. 通过字典创建DataFrame: 可以使用字典来创建DataFrame,其中字典的键表示列名,字典的值表示列数据。
import pandas as pd

# 创建一个字典
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'City': ['New York', 'London', 'Paris']}

# 通过字典创建DataFrame
df = pd.DataFrame(data)

print(df)

输出结果为:

      Name  Age      City
0    Alice   25  New York
1      Bob   30    London
2  Charlie   35     Paris

在上面的例子中,我们创建了一个字典data,其中包含三个键值对,分别表示姓名、年龄和城市。然后使用pd.DataFrame()函数将字典转换为DataFrame对象。

  1. 通过列表创建DataFrame: 可以使用列表来创建DataFrame,其中每个列表表示一列数据。
import pandas as pd

# 创建列表
name = ['Alice', 'Bob', 'Charlie']
age = [25, 30, 35]
city = ['New York', 'London', 'Paris']

# 通过列表创建DataFrame
df = pd.DataFrame({'Name': name, 'Age': age, 'City': city})

print(df)

输出结果与前面的例子相同。

在上面的例子中,我们创建了三个列表nameagecity,分别表示姓名、年龄和城市数据。然后通过将列表组合成一个字典,并使用pd.DataFrame()函数将其转换为DataFrame对象。

  1. 通过NumPy数组创建DataFrame: 还可以使用NumPy数组来创建DataFrame。
import pandas as pd
import numpy as np

# 创建NumPy数组
data = np.array([['Alice', 25, 'New York'],
                 ['Bob', 30, 'London'],
                 ['Charlie', 35, 'Paris']])

# 通过NumPy数组创建DataFrame
df = pd.DataFrame(data, columns=['Name', 'Age', 'City'])

print(df)

输出结果与前面的例子相同。

在上面的例子中,我们创建了一个NumPy数组data,其中包含了姓名、年龄和城市数据。然后使用pd.DataFrame()函数将数组转换为DataFrame对象,并通过columns参数指定列名。

给DataFrame增加数据

要给Pandas的DataFrame对象增加数据,可以使用多种方法,如使用append()方法、loc索引标签或使用concat()函数等。

下面是几种常见的给DataFrame增加数据的方法:

  1. 使用append()方法: 可以使用append()方法将另一个DataFrame对象追加到当前的DataFrame对象末尾,从而增加数据。
import pandas as pd

# 创建一个空的DataFrame对象
df = pd.DataFrame(columns=['Name', 'Age', 'City'])

# 创建一个新的数据行
new_row = pd.DataFrame({'Name': ['Alice'], 'Age': [25], 'City': ['New York']})

# 使用append()方法追加数据行
df = df.append(new_row)

print(df)

输出结果为:

    Name Age       City
0  Alice  25  New York

在上面的例子中,我们首先创建了一个空的DataFrame对象df,然后使用pd.DataFrame()函数创建了一个新的数据行new_row。接着使用df.append(new_row)new_row追加到df的末尾,并将结果重新赋值给df

  1. 使用loc索引标签: 可以使用loc索引标签来直接赋值新增的行数据。
import pandas as pd

# 创建一个空的DataFrame对象
df = pd.DataFrame(columns=['Name', 'Age', 'City'])

# 直接通过loc索引标签赋值新增行数据
df.loc[0] = ['Alice', 25, 'New York']

print(df)

输出结果为:

    Name Age       City
0  Alice  25  New York

在上面的例子中,我们首先创建了一个空的DataFrame对象df,然后使用df.loc[0] = ['Alice', 25, 'New York']通过loc索引标签将新的行数据赋值给df

需要注意的是,通过loc索引标签赋值时,需要确保索引标签不存在重复,否则会修改已存在的行数据。

  1. 使用concat()函数: 可以使用concat()函数将多个DataFrame对象按行或列进行连接,从而增加数据。
import pandas as pd

# 创建两个DataFrame对象
df1 = pd.DataFrame({'Name': ['Alice'], 'Age': [25], 'City': ['New York']})
df2 = pd.DataFrame({'Name': ['Bob'], 'Age': [30], 'City': ['London']})

# 使用concat()函数按行连接DataFrame对象
df = pd.concat([df1, df2])

print(df)

输出结果为:

    Name  Age       City
0  Alice   25  New York
0    Bob   30     London

在上面的例子中,我们创建了两个DataFrame对象df1df2,然后使用pd.concat([df1, df2])按行连接这两个DataFrame对象,并将结果赋值给df

给DataFrame删除数据

要删除Pandas的DataFrame对象中的数据,可以使用不同的方法,如使用drop()函数、dropna()方法或布尔索引等。

下面是几种常见的删除DataFrame数据的方法:

  1. 使用drop()函数删除行或列: 可以使用drop()函数删除指定的行或列。
import pandas as pd

# 创建一个DataFrame对象
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'],
                   'Age': [25, 30, 35],
                   'City': ['New York', 'London', 'Paris']})

# 删除指定的行
df = df.drop(1)

# 删除指定的列
df = df.drop('City', axis=1)

print(df)

输出结果为:

      Name  Age
0    Alice   25
2  Charlie   35

在上面的例子中,我们首先创建了一个DataFrame对象df,然后使用df.drop(1)删除了索引为1的行,接着使用df.drop('City', axis=1)删除了名为’City’的列。

  1. 使用dropna()方法删除含有缺失值的行或列: 可以使用dropna()方法删除含有缺失值(NaN)的行或列。
import pandas as pd
import numpy as np

# 创建一个含有缺失值的DataFrame对象
df = pd.DataFrame({'Name': ['Alice', 'Bob', np.nan],
                   'Age': [25, np.nan, 35],
                   'City': ['New York', 'London', 'Paris']})

# 删除含有缺失值的行
df = df.dropna()

print(df)

输出结果为:

    Name   Age      City
0  Alice  25.0  New York

在上面的例子中,我们创建了一个包含缺失值的DataFrame对象df,然后使用df.dropna()删除了含有缺失值的行。

  1. 使用布尔索引删除符合条件的行: 可以使用布尔索引来删除符合特定条件的行。
import pandas as pd

# 创建一个DataFrame对象
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'],
                   'Age': [25, 30, 35],
                   'City': ['New York', 'London', 'Paris']})

# 删除Age大于等于30的行
df = df[df['Age'] < 30]

print(df)

输出结果为:

    Name  Age      City
0  Alice   25  New York

在上面的例子中,我们首先创建了一个DataFrame对象df,然后使用布尔索引df['Age'] < 30筛选出Age列中小于30的行,并将结果赋值给df

访问DataFrame 的各种方式

在Pandas中,有多种方式可以访问DataFrame中的数据。下面介绍了一些常见的访问方式:

  1. 使用列名访问列数据: 可以使用列名来访问DataFrame中的列数据,类似于访问字典的键值对。
import pandas as pd

# 创建一个DataFrame对象
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'],
                   'Age': [25, 30, 35],
                   'City': ['New York', 'London', 'Paris']})

# 使用列名访问列数据
name_column = df['Name']
age_column = df['Age']
city_column = df['City']

print(name_column)
print(age_column)
print(city_column)

输出结果为:

0      Alice
1        Bob
2    Charlie
Name: Name, dtype: object

0    25
1    30
2    35
Name: Age, dtype: int64

0    New York
1      London
2       Paris
Name: City, dtype: object

在上面的例子中,我们使用df['Name']df['Age']df['City']访问了DataFrame对象中的三列数据。

  1. 使用行索引访问行数据: 可以使用行索引来访问DataFrame中的行数据,类似于访问列表中的元素。
import pandas as pd

# 创建一个DataFrame对象
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'],
                   'Age': [25, 30, 35],
                   'City': ['New York', 'London', 'Paris']})

# 使用行索引访问行数据
first_row = df.loc[0]
second_row = df.loc[1]
third_row = df.loc[2]

print(first_row)
print(second_row)
print(third_row)

输出结果为:

Name        Alice
Age            25
City     New York
Name: 0, dtype: object

Name        Bob
Age          30
City     London
Name: 1, dtype: object

Name    Charlie
Age          35
City       Paris
Name: 2, dtype: object

在上面的例子中,我们使用df.loc[0]df.loc[1]df.loc[2]访问了DataFrame对象中的三行数据。

  1. 使用行列索引访问特定的元素: 可以使用行列索引来访问DataFrame中特定位置的元素,类似于访问二维数组中的元素。
import pandas as pd

# 创建一个DataFrame对象
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'],
                   'Age': [25, 30, 35],
                   'City': ['New York', 'London', 'Paris']})

# 使用行列索引访问特定的元素
value = df.loc[0, 'Name']

print(value)

输出结果为:

Alice

在上面的例子中,我们使用df.loc[0, 'Name']访问了DataFrame对象中行索引为0、列索引为’Name’的元素。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐