摘要:在数据处理与分析领域,Python的Pandas库可谓是一颗璀璨的明星。Pandas提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据 ,让数据处理变得高效又轻松。接下来,让我们一步步走进Pandas的精彩世界。
在数据处理与分析领域,Python的Pandas库可谓是一颗璀璨的明星。Pandas提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据 ,让数据处理变得高效又轻松。接下来,让我们一步步走进Pandas的精彩世界。
安装Pandas有多种方式,以下为你介绍常见的几种:
1. 使用pip安装:pip是Python的包管理器 ,打开命令行界面(Windows的CMD或PowerShell,Linux或Mac的Terminal),输入pip install pandas即可完成安装。如果使用的是Python 3,且pip没有指向Python 3的版本,可能需要使用pip3 install pandas,或者python -m pip install pandas 、python3 -m pip install pandas确保使用正确的Python版本。
2. 使用国内镜像源:由于默认的pip下载源在国内访问时下载速度过慢,可使用国内镜像源加速下载。例如从清华大学的TUNA镜像源安装pandas,命令为pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pandas 。
3. 使用Anaconda安装:Anaconda是一个用于数据分析和科学计算的Python发行版,非常适合数据处理工作。如果已经安装了Anaconda,可使用conda命令安装pandas,即conda install pandas 。conda通常与Anaconda一起安装,用于管理Python环境和包。
4. 在IDE中安装:以PyCharm为例,转到File>Settings>Project: (Your Project Name)>Python Interpreter ,点击右下角的+按钮,搜索pandas并安装。
安装完成后,可以在Python解释器或脚本中尝试导入pandas来验证是否成功安装:
import pandas as pd
如果成功导入并且没有报错,说明pandas已经成功安装。
Pandas主要有两种数据结构:Series和DataFrame。
Series
Series是一种一维数组结构,能够保存任何数据类型(整数、字符串、浮点数、Python对象等),并且每个元素都有一个标签(索引)。
创建Series
1. 通过列表创建:
import pandas as pd
data = [10, 20, 30, 40, 50]
s = pd.Series(data)
print(s)
2. 通过numpy数组创建:
import pandas as pd
import numpy as np
data = np.array([10, 20, 30, 40, 50])
s = pd.Series(data)
print(s)
3. 通过字典创建:字典的键会成为Series的索引,值成为Series的值。
import pandas as pd
data = {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50}
s = pd.Series(data)
print(s)
4. 指定索引创建:可以在创建时自定义索引。
import pandas as pd
data = [10, 20, 30, 40, 50]
index = ['one', 'two', 'three', 'four', 'five']
s = pd.Series(data, index=index)
print(s)
Series常见属性
• index:返回索引。
• dtype:返回对象的数据类型。
• ndim:返回底层数据的维数,Series默认维数为1。
• size:返回基础数据中的元素个数。
• values:将系列作为ndarray返回。
DataFrame
DataFrame是一个二维表格型数据结构,可以看作是由多个Series组成,每一列都是一个Series,且所有列共享同一索引。DataFrame既有行索引也有列索引,每列可以是不同的数据类型(数值、字符串、布尔型等) 。
创建DataFrame
1. 通过字典创建:字典的键作为列名,值作为列数据。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'London', 'Paris']
}
df = pd.DataFrame(data)
print(df)
2. 通过列表的字典创建:
import pandas as pd
data = [
{'Name': 'Alice', 'Age': 25, 'City': 'New York'},
{'Name': 'Bob', 'Age': 30, 'City': 'London'},
{'Name': 'Charlie', 'Age': 35, 'City': 'Paris'}
]
df = pd.DataFrame(data)
print(df)
3. 通过NumPy数组创建:需要指定列名。
import pandas as pd
import numpy as np
data = np.array([[25, 'Alice', 'New York'], [30, 'Bob', 'London'], [35, 'Charlie', 'Paris']])
columns = ['Age', 'Name', 'City']
df = pd.DataFrame(data, columns=columns)
print(df)
DataFrame常见属性
• columns:返回列索引。
• index:返回行索引。
• dtypes:返回每列的数据类型。
• shape:返回DataFrame的形状,即(行数,列数)。
Pandas支持从各种数据源读取数据,也能将数据输出到这些格式的文件中。
读取数据
1. 从CSV文件读取:使用read_csv函数。
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
2. 从Excel文件读取:使用read_excel函数。
import pandas as pd
df = pd.read_excel('data.xlsx')
print(df)
3. 从SQL数据库读取:需要先建立数据库连接,再使用read_SQL函数。
import pandas as pd
from sqlalchemy import create_engine
# 建立数据库连接
engine = create_engine('sqlite:///my_database.db')
df = pd.read_sql('my_table', engine)
print(df)
写入数据
1. 将DataFrame数据写入CSV文件:使用to_csv函数。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'London', 'Paris']
}
df = pd.DataFrame(data)
df.to_csv('output.csv', index=False)
2. 将DataFrame数据写入Excel文件:使用to_excel函数。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'London', 'Paris']
}
df = pd.DataFrame(data)
df.to_excel('output.xlsx', index=False)
在数据分析中,数据清洗是至关重要的一步,Pandas提供了丰富的功能来处理常见的数据问题。
缺失值处理
1. 删除缺失值:使用dropna函数,默认会删除含有缺失值的行。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', None, 'Charlie'],
'Age': [25, None, 35, 40],
'City': ['New York', 'London', 'Paris', None]
}
df = pd.DataFrame(data)
new_df = df.dropna
print(new_df)
2. 填充缺失值:使用fillna函数,可以用指定的值填充缺失值。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', None, 'Charlie'],
'Age': [25, None, 35, 40],
'City': ['New York', 'London', 'Paris', None]
}
df = pd.DataFrame(data)
df.fillna('Unknown', inplace=True)
print(df)
重复值处理
使用duplicated函数可以检测重复行,drop_duplicates函数用于删除重复行。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Alice', 'Charlie'],
'Age': [25, 30, 25, 40],
'City': ['New York', 'London', 'New York', 'Paris']
}
df = pd.DataFrame(data)
# 检测重复行
duplicates = df.duplicated
print(duplicates)
# 删除重复行
new_df = df.drop_duplicates
print(new_df)
数据类型转换
使用astype函数可以将一列数据从一种类型转换为另一种类型。
import pandas as pd
data = {
'Age': ['25', '30', '35', '40']
}
df = pd.DataFrame(data)
df['Age'] = df['Age'].astype(int)
print(df)
文本数据处理
Pandas提供了一系列字符串处理方法,如分割、替换、去除空格等。
import pandas as pd
data = {
'FullName': ['Alice Smith', 'Bob Johnson', 'Charlie Brown']
}
df = pd.DataFrame(data)
# 分割字符串
df['FirstName'] = df['FullName'].str.split(' ').str[0]
df['LastName'] = df['FullName'].str.split(' ').str[1]
print(df)
# 替换字符串
df['FullName'] = df['FullName'].str.replace(' ', '-')
print(df)
# 去除空格
data = {
'City': [' New York ', ' London ', ' Paris ']
}
df = pd.DataFrame(data)
df['City'] = df['City'].str.strip
print(df)
在DataFrame中,可以通过多种方式筛选和查询数据。
基于索引筛选
1. 通过标签索引(loc):loc函数通过行和列的标签来选择数据。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40],
'City': ['New York', 'London', 'Paris', 'Sydney']
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd'])
# 选择单行
row_data = df.loc['b']
print(row_data)
# 选择多行
rows_data = df.loc[['a', 'c']]
print(rows_data)
# 选择单列
column_data = df.loc[:, 'Name']
print(column_data)
# 选择多列
columns_data = df.loc[:, ['Name', 'City']]
print(columns_data)
# 选择特定行和列
specific_data = df.loc['b', 'City']
print(specific_data)
2. 通过位置索引(iloc):iloc函数通过行和列的位置来选择数据。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40],
'City': ['New York', 'London', 'Paris', 'Sydney']
}
df = pd.DataFrame(data)
# 选择单行
row_data = df.iloc[1]
print(row_data)
# 选择多行
rows_data = df.iloc[[0, 2]]
print(rows_data)
# 选择单列
column_data = df.iloc[:, 0]
print(column_data)
# 选择多列
columns_data = df.iloc[:, [0, 2]]
print(columns_data)
# 选择特定行和列
specific_data = df.iloc[1, 2]
print(specific_data)
布尔索引
通过布尔条件筛选数据。
# 筛选年龄大于30的数据
filtered_data = df[df['Age'] > 30]
print(filtered_data)
# 筛选城市为New York的数据
filtered_data = df[df['City'] == 'New York']
print(filtered_data)
query函数
使用query函数可以以类似SQL查询的方式筛选数据。
# 筛选年龄大于30的数据
filtered_data = df.query('Age > 30')
print(filtered_data)
# 筛选年龄大于30且城市为Paris的数据
filtered_data = df.query('Age > 30 and City == "Paris"')
print(filtered_data)
apply函数
使用apply函数可以对数据应用自定义函数。
import pandas as pd
data = {
'Age': [25, 30, 35, 40]
}
df = pd.DataFrame(data)
# 定义一个函数,将年龄加10
def add_ten(age):
return age + 10
df['NewAge'] = df['Age'].apply(add_ten)
print(df)
groupby函数
groupby函数用于对数据进行分组,然后可以使用聚合函数(如sum、mean、count等)对分组后的数据进行统计。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, 30, 35, 40, 45],
'City': ['New York', 'London', 'New York', 'London', 'New York'],
'Salary': [5000, 6000, 5500, 6500, 7000]
}
df = pd.DataFrame(data)
# 按城市分组,计算每个城市的平均工资
grouped_data = df.groupby('City')['Salary'].mean
print(grouped_data)
# 按城市分组,计算每个城市的人数
grouped_data = df.groupby('City')['Name'].count
print(grouped_data)
Pandas具有强大的时间序列数据处理功能,支持日期和时间的索引和计算。
日期和时间的创建
# 创建日期
date = pd.to_datetime('2024-10-01')
print(date)
# 创建时间
time = pd.to_datetime('10:30:00', format='%H:%M:%S')
print(time)
# 创建日期时间
datetime = pd.to_datetime('2024-10-01 10:30:00')
print(datetime)
日期范围生成
使用date_range函数生成日期范围。
# 生成指定日期范围内的日期序列
dates = pd.date_range(start='2024-10-01', end='2024-10-10')
print(dates)
# 生成指定长度的日期序列
dates = pd.date_range(start='2024-10-01', periods=5)
print(dates)
频率转换
可以对时间序列进行频率转换,如将日数据转换为月数据。
import pandas as pd
dates = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
data = {'Value': range(len(dates))}
df = pd.DataFrame(data, index=dates)
# 将日数据转换为月数据,计算每月的总和
monthly_data = df.resample('M').sum
print(monthly_data)
通过以上内容,你已经对Pandas有了较为全面的了解,从安装到基本数据结构,再到数据读取、清洗、筛选、转换以及时间序列处理等操作。
希望这份教程能帮助你在Python数据分析的道路上越走越顺,充分发挥Pandas的强大功能,挖掘数据背后的价值。
来源:绿叶菜