Bootstrap

python 中pandas的基础使用介绍(一)

在Python中,pandas 是一个非常强大的数据处理库,广泛用于数据分析、数据清洗、数据处理等任务。它的核心数据结构有两个:SeriesDataFrame

1. 安装 Pandas

首先,你需要安装 pandas,如果你还没有安装,可以使用以下命令:

pip install pandas

2. 导入 pandas

在开始使用 pandas 之前,需要导入它:

import pandas as pd

3. Pandas的核心数据结构

Series

Series 是一维的标签化数组,可以存储任何数据类型(整数、字符串、浮动等)。

创建一个 Series

import pandas as pd

# 使用列表创建 Series
s = pd.Series([1, 2, 3, 4, 5])
print(s)

输出:

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

你还可以为 Series 指定索引:

s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s)

输出:

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

DataFrame 是一个二维的标签化数据结构,它可以被认为是由多个 Series 组成的字典。每个 Series 共享一个共同的索引。

创建一个 DataFrame

import pandas as pd

# 使用字典创建 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [24, 27, 22, 32],
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}

df = pd.DataFrame(data)
print(df)

输出:

      Name  Age         City
0    Alice   24     New York
1      Bob   27  Los Angeles
2  Charlie   22      Chicago
3    David   32      Houston

你也可以指定索引:

df = pd.DataFrame(data, index=['a', 'b', 'c', 'd'])
print(df)

输出:

      Name  Age         City
a    Alice   24     New York
b      Bob   27  Los Angeles
c  Charlie   22      Chicago
d    David   32      Houston

4. 访问数据

访问 Series

你可以通过标签(索引)访问 Series 中的数据:

print(s['a'])  # 1

你也可以使用 .iloc[] 按位置访问数据:

print(s.iloc[0])  # 1
访问 DataFrame

你可以通过列名访问 DataFrame 中的列:

print(df['Name'])

输出:

a      Alice
b        Bob
c    Charlie
d      David
Name: Name, dtype: object

如果你需要获取多列,可以传入一个列名列表:

print(df[['Name', 'Age']])

访问行,可以使用 .loc[].iloc[]

  • .loc[]:根据标签访问行
  • .iloc[]:根据位置访问行
print(df.loc['a'])  # 根据标签访问行
print(df.iloc[0])   # 根据位置访问行

5. 常见的 DataFrame 操作

查看前几行和后几行
print(df.head())  # 默认显示前 5 行
print(df.tail(2))  # 显示最后 2 行
获取 DataFrame 的形状(行数和列数)
print(df.shape)  # 输出 (行数, 列数)
获取列名和索引
print(df.columns)  # 获取列名
print(df.index)    # 获取行索引
描述统计
print(df.describe())  # 获取数值列的统计信息
数据选择与过滤

你可以基于条件来选择数据:

# 选择年龄大于 25 的行
print(df[df['Age'] > 25])

6. 数据清洗和处理

在数据分析中,清洗和处理数据是非常重要的步骤。pandas 提供了丰富的工具来处理缺失值、重复数据、类型转换等。

处理缺失值
  • 检查缺失值

你可以使用 .isnull().notnull() 来检查缺失值:

print(df.isnull())   # 检查每个值是否为缺失值
print(df.notnull())  # 检查每个值是否非缺失值
  • 删除含有缺失值的行或列
# 删除含有任何缺失值的行
df_cleaned = df.dropna()

# 删除含有任何缺失值的列
df_cleaned = df.dropna(axis=1)
  • 填充缺失值
# 使用特定值填充缺失值
df_filled = df.fillna(0)  # 用 0 填充

# 使用前一个有效值填充缺失值
df_filled = df.fillna(method='ffill')

# 使用后一个有效值填充缺失值
df_filled = df.fillna(method='bfill')
处理重复数据

你可以使用 .duplicated().drop_duplicates() 来处理重复的数据。

  • 检查重复数据
print(df.duplicated())  # 查看每行是否为重复行
  • 删除重复数据
df_no_duplicates = df.drop_duplicates()
类型转换

你可以使用 astype() 来转换列的数据类型。例如:

df['Age'] = df['Age'].astype(float)  # 将 'Age' 列转换为 float 类型

7. 数据合并和连接

在实际的数据处理中,常常需要将多个数据源合并在一起。pandas 提供了多种合并方式:

合并(merge)

merge() 函数用于根据某些列进行连接,类似 SQL 中的 JOIN 操作。

df1 = pd.DataFrame({
    'ID': [1, 2, 3],
    'Name': ['Alice', 'Bob', 'Charlie']
})

df2 = pd.DataFrame({
    'ID': [2, 3, 4],
    'Age': [27, 22, 32]
})

# 根据 'ID' 列进行合并
merged_df = pd.merge(df1, df2, on='ID', how='inner')
print(merged_df)

输出:

   ID     Name  Age
0   2      Bob   27
1   3  Charlie   22

how 参数指定了连接的方式:

  • inner:内连接,仅保留两边都存在的行。
  • left:左连接,保留左边数据集中的所有行。
  • right:右连接,保留右边数据集中的所有行。
  • outer:外连接,保留两个数据集中的所有行。
连接(concat)

concat() 函数用于沿着一个轴(行或列)连接多个 DataFrame

  • 按行连接
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

df_concat = pd.concat([df1, df2], axis=0)  # axis=0 表示按行连接
print(df_concat)

输出:

   A  B
0  1  3
1  2  4
0  5  7
1  6  8
  • 按列连接
df_concat = pd.concat([df1, df2], axis=1)  # axis=1 表示按列连接
print(df_concat)

输出:

   A  B  A  B
0  1  3  5  7
1  2  4  6  8

8. 分组操作(GroupBy)

分组操作是数据分析中的重要步骤,pandas 提供了 groupby() 函数来对数据进行分组操作。

继续从分组操作开始:

根据某一列分组并计算统计量

你可以使用 groupby() 来对数据进行分组,然后计算各组的统计量。

data = {
    'City': ['New York', 'Los Angeles', 'New York', 'Houston', 'Chicago', 'Chicago'],
    'Temperature': [21, 25, 19, 31, 12, 15],
    'Humidity': [60, 65, 70, 55, 80, 75]
}

df = pd.DataFrame(data)

# 按照城市进行分组,计算温度和湿度的平均值
grouped = df.groupby('City').mean()
print(grouped)

输出:

               Temperature  Humidity
City                                
Chicago                13.5      77.5
Houston                31.0      55.0
Los Angeles            25.0      65.0
New York               20.0      65.0

你可以对多列进行聚合计算,使用 agg() 方法来指定不同列的聚合方式:

# 按照城市分组,计算温度的最大值,湿度的最小值
grouped = df.groupby('City').agg({
    'Temperature': 'max',  # 计算温度的最大值
    'Humidity': 'min'      # 计算湿度的最小值
})
print(grouped)

输出:

               Temperature  Humidity
City                                
Chicago                15        75
Houston                31        55
Los Angeles            25        65
New York               21        60
过滤分组数据

你还可以通过条件过滤分组后的数据。例如,只保留温度大于 20 的城市:

# 过滤出温度平均值大于 20 的城市
grouped = df.groupby('City').filter(lambda x: x['Temperature'].mean() > 20)
print(grouped)

输出:

           City  Temperature  Humidity
1  Los Angeles           25        65
3      Houston           31        55

9. 数据透视表 (Pivot Tables)

数据透视表可以帮助你从原始数据中聚合并展示多维度的信息。

创建数据透视表

pandas 提供了 pivot_table() 方法来创建数据透视表。

# 创建数据透视表,按 'City' 和 'Month' 聚合温度的均值
data = {
    'City': ['New York', 'New York', 'Los Angeles', 'Los Angeles', 'Chicago', 'Chicago'],
    'Month': ['January', 'February', 'January', 'February', 'January', 'February'],
    'Temperature': [30, 32, 75, 77, 20, 22],
    'Humidity': [60, 58, 65, 62, 75, 70]
}

df = pd.DataFrame(data)

# 使用 pivot_table() 创建透视表
pivot = pd.pivot_table(df, values='Temperature', index='City', columns='Month', aggfunc='mean')
print(pivot)

输出:

Month        January  February
City                           
Chicago          20        22
Los Angeles     75        77
New York        30        32

你可以指定不同的聚合函数,例如计算温度的最大值、最小值等:

pivot = pd.pivot_table(df, values='Temperature', index='City', columns='Month', aggfunc='max')
print(pivot)

输出:

Month        January  February
City                           
Chicago          20        22
Los Angeles     75        77
New York        30        32

10. 时间序列处理

pandas 提供了强大的时间序列处理功能,适用于日期、时间的分析和操作。

创建时间序列
# 创建从 2025年1月1日到1月10日的日期范围
dates = pd.date_range('2025-01-01', periods=10)
print(dates)

输出:

DatetimeIndex(['2025-01-01', '2025-01-02', '2025-01-03', '2025-01-04', '2025-01-05',
               '2025-01-06', '2025-01-07', '2025-01-08', '2025-01-09', '2025-01-10'],
              dtype='datetime64[ns]', freq='D')

你可以通过 freq 参数指定日期的频率,如每日 ('D')、每周 ('W')、每月 ('M')、每小时 ('H') 等。

将日期列转换为 datetime 类型

pandas 允许你将字符串转换为 datetime 类型,方便进行时间操作。使用 pd.to_datetime() 来实现转换:

df = pd.DataFrame({
    'Date': ['2025-01-01', '2025-01-02', '2025-01-03', '2025-01-04'],
    'Temperature': [30, 31, 32, 33]
})

df['Date'] = pd.to_datetime(df['Date'])
print(df)

输出:

        Date  Temperature
0 2025-01-01           30
1 2025-01-02           31
2 2025-01-03           32
3 2025-01-04           33
提取日期信息

你可以从 datetime 类型的列中提取出年、月、日、小时、分钟等信息:

# 提取年份、月份和日期
df['Year'] = df['Date'].dt.year
df['Month'] = df['Date'].dt.month
df['Day'] = df['Date'].dt.day

print(df)

输出:

        Date  Temperature  Year  Month  Day
0 2025-01-01           30  2025      1    1
1 2025-01-02           31  2025      1    2
2 2025-01-03           32  2025      1    3
3 2025-01-04           33  2025      1    4
时间偏移

pandas 支持通过 timedelta 对时间进行加减操作。例如,获取日期加上一天或减去一周:

# 给每个日期加上一天
df['Next Day'] = df['Date'] + pd.Timedelta(days=1)
print(df)

输出:

        Date  Temperature  Year  Month  Day   Next Day
0 2025-01-01           30  2025      1    1 2025-01-02
1 2025-01-02           31  2025      1    2 2025-01-03
2 2025-01-03           32  2025      1    3 2025-01-04
3 2025-01-04           33  2025      1    4 2025-01-05

基础使用先说到这里哦,欢迎关注留言一起学习。

;