python数据分析-pandas

引言

数据分析是当今世界中日益重要的技能之一。随着大量数据的产生和积累,数据分析能力已成为了解、预测和解决各种问题的关键工具。无论你是一名数据分析师,一名学生,还是一个对数据分析感兴趣的人,了解如何使用Python和Pandas进行数据分析都将帮助你更好地理解和利用数据。

本文旨在向你介绍Python数据分析的基本概念和技术,重点介绍了Pandas库,这是Python中最受欢迎的数据分析工具之一。从Pandas的基本数据结构和操作开始,逐步深入到数据清洗、数据变形、数据分析和可视化等方面。

一、Pandas基础

1.1 介绍Pandas

什么是Pandas?

Pandas(Panel Data的缩写)是一个流行的开源Python库,用于数据分析和处理。它提供了强大的数据结构和数据分析工具,使数据科学家、分析师和开发人员能够更轻松地处理和分析结构化数据。

Pandas主要引入了两种主要的数据结构:

  1. Series: Series是一维数据结构,类似于数组或列表,但具有数据标签,可以存储不同数据类型。Series是Pandas操作的基本单位。

    示例:

    import pandas as pd
    
    data = pd.Series([1, 2, 3, 4])
  2. DataFrame: DataFrame是一个二维表格,由多个Series构成。它类似于电子表格或SQL表,可轻松处理和分析大量数据。DataFrame是Pandas的核心数据结构。

    示例:

    import pandas as pd
    
    data = {'Name': ['Alice', 'Bob', 'Charlie'],
            'Age': [25, 30, 35]}
    df = pd.DataFrame(data)

Pandas的功能远不止于此,它包含了许多数据操作、清洗、合并、分组、聚合、绘图等功能,使数据处理和分析变得更加高效。

为什么要使用Pandas?

Pandas具有以下优点,使其成为数据分析的首选工具之一:

  • 数据清洗和处理: Pandas提供了丰富的功能,可轻松处理缺失值、重复值、数据类型转换等数据清洗任务。

  • 数据索引和选择: 你可以使用标签或位置来快速选择和操作数据,使数据提取更加灵活。

  • 数据聚合和转换: Pandas支持强大的数据分组和聚合操作,能够进行高级数据转换和透视。

  • 数据可视化: Pandas可以与Matplotlib等库结合使用,帮助你创建各种数据可视化图表。

  • 与其他工具集成: Pandas可以轻松与其他Python库(如NumPy、Matplotlib、Scikit-Learn等)结合使用,构建完整的数据科学工作流。

安装Pandas

要安装Pandas,可以使用Python包管理工具(pip或conda)。首先,确保Python环境已经安装了这些工具。

使用pip安装Pandas的命令如下:

pip install pandas

使用conda安装Pandas的命令如下:

conda install pandas

安装完成后,可以开始使用Pandas来进行数据分析了。

好,我们继续填充第一部分的内容:1.2 数据结构

1.2 数据结构

一维数据结构:series

Series是Pandas中的一维数据结构,它类似于一维数组或列表,但有一些额外的功能。Series由两个主要部分组成:数据值和索引标签。索引标签使我们可以对数据进行更有意义的标识和检索。

创建Series

要创建一个Series,使用pd.Series()构造函数,并将数据传递给它。下面是一个简单的示例:

import pandas as pd

data = [10, 20, 30, 40]
series = pd.Series(data)

print(series)

# 输出
0    10
1    20
2    30
3    40
dtype: int64

二维数据结构:DataFrame

DataFrame是Pandas的核心数据结构,它类似于一个二维表格或SQL表。DataFrame是由多个Series对象组成,每个Series对应表格中的一列。它具有行和列的标签,可以轻松地处理和分析复杂的数据。

创建DataFrame

要创建一个DataFrame,使用pd.DataFrame()构造函数,并传递一个包含数据的字典。每个键值对表示DataFrame的一列,键是列名,值是列的数据。

下面是一个示例:

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35]}

df = pd.DataFrame(data)

print(df)

# 输出
      Name  Age
0    Alice   25
1      Bob   30
2  Charlie   35

继续填充第一部分的内容:1.3 基本操作

1.3 基本操作

数据索引和选择

在Pandas中,使用索引来访问和选择数据索引可以是整数位置(位置索引)或标签(标签索引)。以下是一些基本的数据索引和选择操作:

使用位置索引:

import pandas as pd

data = [10, 20, 30, 40]
series = pd.Series(data)

# 使用位置索引选择第一个元素
element = series[0]

使用标签索引:

import pandas as pd

data = [10, 20, 30, 40]
index_labels = ['A', 'B', 'C', 'D']
series = pd.Series(data, index=index_labels)

# 使用标签索引选择元素
element = series['B']

数据切片和筛选

Pandas允许使用切片和布尔条件来筛选数据。

使用切片:

import pandas as pd

data = [10, 20, 30, 40]
index_labels = ['A', 'B', 'C', 'D']
series = pd.Series(data, index=index_labels)

# 使用切片选择一部分数据
subset = series['B':'D']

使用布尔条件:

import pandas as pd

data = [10, 20, 30, 40]
index_labels = ['A', 'B', 'C', 'D']
series = pd.Series(data, index=index_labels)

# 使用布尔条件选择满足条件的数据
filtered_data = series[series > 20]

数据的增删改查

在Pandas中,对数据进行增加、删除、修改和查询的操作。

数据的增加:

import pandas as pd

data = [10, 20, 30, 40]
index_labels = ['A', 'B', 'C', 'D']
series = pd.Series(data, index=index_labels)

# 添加新数据
series['E'] = 50

数据的删除:

import pandas as pd

data = [10, 20, 30, 40]
index_labels = ['A', 'B', 'C', 'D']
series = pd.Series(data, index=index_labels)

# 删除数据
series = series.drop('B')

数据的修改:

import pandas as pd

data = [10, 20, 30, 40]
index_labels = ['A', 'B', 'C', 'D']
series = pd.Series(data, index=index_labels)

# 修改数据
series['B'] = 25

1.4 数据加载和保存

从CSV、Excel、SQL数据库等加载数据

Pandas提供了多种方法来加载不同格式的数据,包括CSV文件、Excel文件、SQL数据库等。以下是一些常见的方法:

从CSV文件加载数据:

import pandas as pd

# 从CSV文件加载数据
data = pd.read_csv('data.csv')

从Excel文件加载数据:

import pandas as pd

# 从Excel文件加载数据
data = pd.read_excel('data.xlsx', sheet_name='Sheet1')

从SQL数据库加载数据:

import pandas as pd
from sqlalchemy import create_engine

# 创建数据库连接
engine = create_engine('sqlite:///mydatabase.db')

# 从SQL数据库加载数据
query = 'SELECT * FROM mytable'
data = pd.read_sql_query(query, engine)

将数据保存为CSV、Excel、SQL等格式

可以使用Pandas将数据保存到不同的文件格式中。

将数据保存为CSV文件:

import pandas as pd

data = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

# 将数据保存为CSV文件
data.to_csv('mydata.csv', index=False)

将数据保存为Excel文件:

import pandas as pd

data = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

# 将数据保存为Excel文件
data.to_excel('mydata.xlsx', sheet_name='Sheet1', index=False)

将数据保存到SQL数据库:

import pandas as pd
from sqlalchemy import create_engine

data = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

# 创建数据库连接
engine = create_engine('sqlite:///mydatabase.db')

# 将数据保存到SQL数据库
data.to_sql('mytable', engine, if_exists='replace', index=False)

继续填充第一部分的内容:1.5 数据基本信息

1.5 数据基本信息

查看数据的基本信息

在数据分析中,了解数据的基本信息是非常重要的,可以更好地理解数据集。Pandas提供了几个方法来查看数据的基本信息:

info()方法查看数据信息:

import pandas as pd

data = pd.read_csv('data.csv')

# 查看数据的基本信息,info()方法会显示数据的行数、列数、每列的非空值数量、数据类型等信息
data.info()

数据类型和空值处理

在数据分析过程中,了解数据的数据类型和处理空值是必要的。

查看数据类型:

使用dtypes属性查看每列的数据类型。

import pandas as pd

data = pd.read_csv('data.csv')

# 查看每列的数据类型
data_types = data.dtypes

处理空值:

处理空值是数据清洗的一部分,使用dropna()方法删除包含空值的行,或使用fillna()方法填充空值。

import pandas as pd

data = pd.read_csv('data.csv')

# 删除包含空值的行
data = data.dropna()

# 填充空值为特定值(例如,填充为0)
data = data.fillna(0)

二、数据清洗和准备

2.1 数据清洗

数据清洗是数据分析的关键步骤,它包括处理缺失值、处理重复值以及进行数据类型转换

处理缺失值

缺失值是数据中的空白或未定义值,它们可以干扰数据分析过程。Pandas提供了方法来处理缺失值。

查找缺失值:

使用isna()isnull()方法查找缺失值。

import pandas as pd

data = pd.read_csv('data.csv')

# 查找缺失值
missing_values = data.isna()

处理缺失值:

处理缺失值的方法包括删除包含缺失值的行或列,或者用特定的值进行填充。

import pandas as pd

data = pd.read_csv('data.csv')

# 删除包含缺失值的行
data = data.dropna()

# 填充缺失值为特定值(例如,填充为0)
data = data.fillna(0)

处理重复值

重复值可能导致数据分析中的不准确结果,因此处理重复值也很重要。

查找重复值:

使用duplicated()方法查找重复值。

import pandas as pd

data = pd.read_csv('data.csv')

# 查找重复值
duplicates = data.duplicated()
处理重复值:

处理重复值的方法包括删除重复行。

import pandas as pd

data = pd.read_csv('data.csv')

# 删除重复行
data = data.drop_duplicates()

数据类型转换

有时,数据的类型可能不符合分析的要求,需要进行数据类型转换。

转换数据类型:

使用astype()方法进行数据类型转换。

import pandas as pd

data = pd.read_csv('data.csv')

# 将列A的数据类型转换为整数
data['A'] = data['A'].astype(int)

继续填充第二部分的内容:2.2 数据合并

2.2 数据合并

在数据分析中,经常需要合并不同的数据集,以便进行更全面的分析。Pandas提供了方法来合并和连接数据集。

合并数据集

合并数据集通常是将两个或多个数据集合并为一个更大的数据集。

concat()合并数据集:

import pandas as pd

# 创建两个数据集
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2']})
df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'],
                    'B': ['B3', 'B4', 'B5']})
print(df1)
print(df2)
# 输出
    A   B
0  A0  B0
1  A1  B1
2  A2  B2
    A   B
0  A3  B3
1  A4  B4
2  A5  B5

# 使用concat()方法合并数据集
result = pd.concat([df1, df2])

# 输出
    A   B
0  A0  B0
1  A1  B1
2  A2  B2
0  A3  B3
1  A4  B4
2  A5  B5
# 发现了一个问题,这里的索引混乱了,使用ignore_index=True,参数便可
# 使用concat()方法合并数据集,并重新生成索引
result = pd.concat([df1, df2], ignore_index=True)

连接数据集

连接数据集通常是将两个数据集基于某些条件连接在一起。

merge()连接数据集:

import pandas as pd

# 创建两个数据集
left = pd.DataFrame({'key': ['A', 'B', 'C'],
                     'value_left': [1, 2, 3]})
right = pd.DataFrame({'key': ['B', 'C', 'D'],
                      'value_right': [4, 5, 6]})

# 使用merge()方法连接数据集
result = pd.merge(left, right, on='key')
print(left)
print(right)
print(result)

# 输出 on参数为找key列,必须在左右两个数据集中都存在。如果没有显式指定,而又有相同的列名,则会自动寻找相同的列进行合并。
  key  value_left
0   A           1
1   B           2
2   C           3
  key  value_right
0   B            4
1   C            5
2   D            6
  key  value_left  value_right
0   B           2            4
1   C           3            5

继续填充第二部分的内容:2.3 数据变形

2.3 数据变形

数据变形是数据分析的重要环节,它包括创建透视表、进行数据透视、进行数据分组和聚合等操作。

透视表和数据透视

透视表是一种用于汇总和分析数据的强大工具,Pandas提供了创建透视表的方法。

pivot_table()创建透视表:

import pandas as pd

data = pd.DataFrame({'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],
                     'Category': ['A', 'B', 'A', 'B'],
                     'Value': [10, 20, 15, 25]})

# 使用pivot_table()方法创建透视表
pivot = data.pivot_table(index='Date', columns='Category', values='Value', aggfunc='sum')
print(pivot)

# 输出
Category     A   B
Date              
2023-01-01  10  20
2023-01-02  15  25

数据分组和聚合

数据分组和聚合是将数据按照某些条件划分为组,并对每个组进行统计或计算的操作。

groupby()进行数据分组和聚合:

import pandas as pd

data = pd.DataFrame({'Category': ['A', 'B', 'A', 'B'],
                     'Value': [10, 20, 15, 25]})

# 使用groupby()方法对数据进行分组
grouped = data.groupby('Category')

# 对每个组进行聚合操作,例如计算平均值
aggregated = grouped.mean()
print(aggregated)
# 输出
          Value
Category       
A          12.5
B          22.5

三、数据分析和可视化

3.1 数据分析

在数据分析阶段,通常进行统计分析、排序、排名以及各种数据计算。

统计描述性统计信息

Pandas提供了一组用于计算描述性统计信息的函数,如均值、中位数、标准差等。

使用describe()方法查看基本统计信息:

import pandas as pd

data = pd.read_csv('data.csv')

# 使用describe()方法查看基本统计信息
summary = data.describe()

数据排序和排名

对数据进行排序和排名是了解数据分布和趋势的关键步骤。

使用sort_values()方法进行排序:

import pandas as pd

data = pd.read_csv('data.csv')

# 使用sort_values()方法按列A进行升序排序
sorted_data = data.sort_values(by='A')

使用rank()方法进行排名:

import pandas as pd

data = pd.read_csv('data.csv')

# 使用rank()方法对列B进行排名
ranked_data = data['B'].rank()

数据运算和计算

在数据分析中,通常需要进行各种数学运算和计算,如加法、减法、乘法、除法等。

使用算术运算:

import pandas as pd

data = pd.read_csv('data.csv')

# 对两列进行加法运算
result = data['A'] + data['B']

3.2 数据可视化

数据可视化是数据分析中的重要部分,可以帮助你更好地理解数据、发现趋势和模式。以下是在Python中使用不同工具进行数据可视化的方法。

使用Matplotlib库绘制基本图表

Matplotlib是Python中的常用绘图库,它提供了绘制各种基本图表的功能。

Matplotlib绘制折线图:

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('data.csv')

# 使用Matplotlib绘制折线图
plt.plot(data['Date'], data['Value'])
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Line Chart')
plt.show()

利用Pandas内置绘图功能

Pandas内置了一些绘图功能,使数据可视化更加便捷。

使用Pandas绘制柱状图:

import pandas as pd

data = pd.read_csv('data.csv')

# 使用Pandas绘制柱状图
data['Value'].plot(kind='bar')

高级数据可视化工具(如Seaborn)

Seaborn是建立在Matplotlib之上的高级数据可视化工具,它可以创建更具吸引力的图表。

使用Seaborn绘制散点图:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

data = pd.read_csv('data.csv')

# 使用Seaborn绘制散点图
sns.scatterplot(data=data, x='X', y='Y')
plt.show()

四、高级Pandas技巧

4.1 数据时间序列

处理时间序列数据和日期时间操作是数据分析中的常见任务。Pandas提供了强大的工具来处理时间序列数据。

处理时间序列数据

时间序列数据通常包含日期和时间信息,以及相关的数值数据。Pandas的DatetimeIndex类型可用于处理时间序列数据。

创建时间序列数据:

import pandas as pd

# 创建一个时间序列
date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')
time_series = pd.Series(range(len(date_rng)), index=date_rng)

日期和时间操作

Pandas提供了多种日期和时间操作,以便更好地理解和分析时间序列数据。

提取年、月、日:

import pandas as pd

# 创建一个时间序列
date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')

# 提取年、月、日
year = date_rng.year
month = date_rng.month
day = date_rng.day

日期偏移:

import pandas as pd

# 创建一个时间序列
date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')

# 对日期进行偏移
next_week = date_rng + pd.DateOffset(weeks=1)

日期和时间的格式化

可以使用.strftime()方法将日期和时间格式化为字符串。

import pandas as pd

# 创建一个时间序列
date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')

# 将日期格式化为字符串
formatted_dates = date_rng.strftime('%Y-%m-%d')

4.2 多级索引

多级索引(也称为层次索引)是一种在Pandas中用于管理和分析多维数据的重要工具。它允许创建具有多个级别的索引,以更灵活地访问和分析数据

创建和使用多级索引

创建多级索引需要通过MultiIndex对象来实现。

创建多级索引:
import pandas as pd

data = pd.DataFrame({'A': [1, 2, 3, 4],
                     'B': [5, 6, 7, 8]},
                    index=pd.MultiIndex.from_tuples([('X', 'a'), ('X', 'b'), ('Y', 'c'), ('Y', 'd')],
                                                    names=['Group', 'Letter']))
print(data)
# 输出
              A  B
Group Letter      
X     a       1  5
      b       2  6
Y     c       3  7
      d       4  8
使用多级索引:
# 使用多级索引来访问数据
value = data.loc['X', 'a']['A']
print(value) # 输出为1

数据透视表和多级索引

多级索引与数据透视表结合使用,可以更灵活地对数据进行汇总和分析。

import pandas as pd

data = pd.DataFrame({'Category': ['A', 'B', 'A', 'B'],
                     'Value': [10, 20, 15, 25]})

# 使用Pandas的pivot_table()方法创建数据透视表
pivot = data.pivot_table(index='Category', values='Value', aggfunc='sum')

4.3 数据处理和性能优化

在数据分析中,数据处理的效率非常重要,尤其在处理大型数据集时。以下是一些提高数据处理效率的技巧和方法。

使用向量化操作

向量化操作是一种利用NumPy和Pandas的数组功能,以一种优化的方式处理数据的方法。它可以显著提高处理速度。

示例:使用向量化操作计算两列之和
import pandas as pd

data = pd.DataFrame({'A': [1, 2, 3, 4],
                     'B': [5, 6, 7, 8]})

# 使用向量化操作计算两列之和
data['Sum'] = data['A'] + data['B']
print(data)
# 输出
   A  B  Sum
0  1  5    6
1  2  6    8
2  3  7   10
3  4  8   12

提高数据处理效率的技巧

除了向量化操作,还有一些其他技巧可以提高数据处理的效率。

使用.apply()方法:

import pandas as pd

data = pd.read_csv('data.csv')

# 使用apply()方法对每行进行操作
data['New_Column'] = data.apply(lambda row: row['A'] * 2, axis=1)

大数据集的处理

处理大型数据集时,应采取一些额外的措施来提高性能。

逐块处理大数据集:

import pandas as pd

# 逐块处理大数据集
chunk_size = 1000
for chunk in pd.read_csv('large_data.csv', chunksize=chunk_size):
    # 处理每个数据块
    process_chunk(chunk)

这种方式可以减小内存占用,提高处理效率。

参考

pandas官网:https://pandas.pydata.org/docs/index.html


   转载规则


《python数据分析-pandas》 Bevis23 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Python数据分析-matplotlib Python数据分析-matplotlib
引言当谈论数据分析和数据可视化时,Matplotlib是一个强大的工具,它不仅提供了丰富的功能,还允许用户创建高质量的图形和图表。本篇博客旨在帮助你掌握Matplotlib的基础知识和高级技巧,以便你能够有效地利用它来展示数据、解释趋势和传
2023-10-13
下一篇 
python数据分析-numpy python数据分析-numpy
引言当涉足数据分析世界,无论是初学者还是经验丰富的分析师,都会发现Python是一个强大而灵活的工具。而在Python的数据分析生态系统中,NumPy(Numerical Python)是一个不可或缺的库,它提供了广泛的数学和统计函数,以及
2023-10-13
  目录
切换