位置: 文档库 > Python > 文档下载预览

《pandas库介绍之DataFrame基本操作.doc》

1. 下载的文档为doc格式,下载后可用word或者wps进行编辑;

2. 将本文以doc文档格式下载到电脑,方便收藏和打印;

3. 下载后的文档,内容与下面显示的完全一致,下载之前请确认下面内容是否您想要的,是否完整.

点击下载文档

pandas库介绍之DataFrame基本操作.doc

《pandas库介绍之DataFrame基本操作》

pandas作为Python数据分析的核心库,其DataFrame数据结构提供了高效的数据操作能力。本文将系统梳理DataFrame的基础操作,涵盖创建、索引、筛选、聚合、合并等核心功能,帮助读者快速掌握数据分析的关键技术。

一、DataFrame基础概念

DataFrame是pandas中二维标签化数据结构,可类比为Excel表格或SQL表。它由行索引(index)、列索引(columns)和数据值(values)组成,支持异构数据类型(数值、字符串、布尔值等)的混合存储。

import pandas as pd
import numpy as np

# 创建简单DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'City': ['New York', 'London', 'Paris']}
df = pd.DataFrame(data)
print(df)

输出结果:

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

二、DataFrame创建方法

1. 从字典创建

# 指定索引
df = pd.DataFrame(data, index=['a', 'b', 'c'])

# 嵌套字典(外层键为列名)
nested_data = {'Col1': {'a': 1, 'b': 2},
                'Col2': {'a': 3, 'b': 4}}
df_nested = pd.DataFrame(nested_data)

2. 从NumPy数组创建

arr = np.array([[1, 2, 3], [4, 5, 6]])
df_arr = pd.DataFrame(arr, columns=['A', 'B', 'C'])

3. 从CSV文件读取

df_csv = pd.read_csv('data.csv')
# 常用参数
df_csv = pd.read_csv('data.csv', 
                    sep=',', 
                    header=0, 
                    index_col='ID',
                    na_values=['NA', 'NULL'])

三、数据索引与选择

1. 基本索引方法

# 通过列名选择单列(返回Series)
ages = df['Age']

# 选择多列(返回DataFrame)
sub_df = df[['Name', 'City']]

# 使用loc进行标签索引
print(df.loc['a', 'Col1'])  # 字典式访问
print(df.loc[:, ['Name', 'Age']])  # 所有行,指定列

# 使用iloc进行位置索引
print(df.iloc[0, 1])  # 第1行第2列(从0开始)
print(df.iloc[:2, :])  # 前两行所有列

2. 布尔索引

# 条件筛选
adults = df[df['Age'] >= 30]

# 多条件组合
result = df[(df['Age'] > 25) & (df['City'].str.contains('o'))]

3. 随机抽样

# 简单随机抽样
sample = df.sample(n=2)

# 分层抽样(按City分组后抽样)
sample_strat = df.groupby('City').apply(lambda x: x.sample(1)).reset_index(drop=True)

四、数据清洗与处理

1. 缺失值处理

# 检测缺失值
print(df.isnull().sum())

# 删除缺失值
df_clean = df.dropna()

# 填充缺失值
df_filled = df.fillna({'Age': df['Age'].mean(), 'City': 'Unknown'})

2. 数据类型转换

# 查看数据类型
print(df.dtypes)

# 转换数据类型
df['Age'] = df['Age'].astype(str)
df['Date'] = pd.to_datetime(df['Date'])

3. 字符串处理

# 字符串方法链式操作
df['City'] = df['City'].str.upper().str.replace(' ', '_')

# 正则表达式提取
df['City_Code'] = df['City'].str.extract(r'([A-Z]+)')

五、数据聚合与统计

1. 基本统计量

# 描述性统计
print(df.describe())

# 单列统计
print(df['Age'].mean(), df['Age'].std())

# 分组聚合
grouped = df.groupby('City')['Age'].agg(['mean', 'max', 'count'])

2. 透视表与交叉表

# 透视表
pivot = pd.pivot_table(df, 
                       values='Age', 
                       index='City', 
                       columns='Gender', 
                       aggfunc='mean')

# 交叉表
cross_tab = pd.crosstab(df['City'], df['Gender'])

3. 自定义聚合函数

# 定义聚合函数
def range_calc(series):
    return series.max() - series.min()

# 应用自定义函数
result = df.groupby('City')['Age'].agg(range_calc)

六、数据合并与连接

1. 横向合并(concat)

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

# 纵向合并(默认axis=0)
df_vert = pd.concat([df1, df2], ignore_index=True)

# 横向合并(axis=1)
df_horiz = pd.concat([df1, df2], axis=1)

2. 数据库式合并(merge)

left = pd.DataFrame({'key': ['K0', 'K1'], 'value': [1, 2]})
right = pd.DataFrame({'key': ['K0', 'K2'], 'value': [3, 4]})

# 内连接
inner_join = pd.merge(left, right, on='key', how='inner')

# 左连接
left_join = pd.merge(left, right, on='key', how='left')

# 多键合并
multi_join = pd.merge(left, right, on=['key1', 'key2'])

3. 简单合并(join)

# 基于索引的合并
left_idx = left.set_index('key')
right_idx = right.set_index('key')
joined = left_idx.join(right_idx, how='outer')

七、数据重塑与变形

1. 堆叠与解堆叠

# 长宽格式转换
df_long = pd.DataFrame({'ID': [1, 1, 2],
                        'Var': ['A', 'B', 'A'],
                        'Val': [10, 20, 30]})

# 宽格式转换
df_wide = df_long.pivot(index='ID', columns='Var', values='Val')

# 堆叠操作
stacked = df_wide.stack()

# 解堆叠操作
unstacked = stacked.unstack()

2. 列值展开(melt)

id_vars = ['ID']
value_vars = ['A', 'B']
melted = pd.melt(df_wide, 
                 id_vars=id_vars, 
                 value_vars=value_vars,
                 var_name='Variable', 
                 value_name='Measurement')

3. 分割列与合并列

# 分割列
df['Full_Name'] = ['Alice Smith', 'Bob Johnson']
df[['First', 'Last']] = df['Full_Name'].str.split(' ', expand=True)

# 合并列
df['Name_City'] = df['Name'] + ' - ' + df['City']

八、时间序列处理

1. 日期时间索引

# 创建时间序列
dates = pd.date_range('20230101', periods=6)
ts = pd.Series(np.random.randn(6), index=dates)

# 重采样
monthly = ts.resample('M').mean()

# 滚动窗口计算
rolling_mean = ts.rolling(window=2).mean()

2. 时间偏移量

# 时间偏移
next_month = ts.index + pd.offsets.MonthBegin(1)

# 时区转换
ts_utc = ts.tz_localize('UTC')
ts_local = ts_utc.tz_convert('America/New_York')

九、性能优化技巧

1. 分块处理大数据

# 分块读取CSV
chunk_size = 10000
chunks = pd.read_csv('large_file.csv', chunksize=chunk_size)

for chunk in chunks:
    process(chunk)  # 处理每个数据块

2. 类别数据优化

# 将字符串列转换为类别类型
df['Category'] = df['Category'].astype('category')

# 查看内存使用
print(df.memory_usage(deep=True))

3. 多进程处理

from multiprocessing import Pool

def process_chunk(chunk):
    return chunk.groupby('Col').size()

if __name__ == '__main__':
    with Pool(4) as p:
        results = p.map(process_chunk, chunks)

十、可视化集成

1. 基本绘图

%matplotlib inline
import matplotlib.pyplot as plt

df.plot(x='Name', y='Age', kind='bar')
plt.title('Age Distribution')
plt.show()

2. Seaborn集成

import seaborn as sns

sns.boxplot(x='City', y='Age', data=df)
plt.xticks(rotation=45)

3. 交互式可视化

from plotly.express import bar

fig = bar(df, x='Name', y='Age', color='City')
fig.show()

十一、实际应用案例

1. 销售数据分析

# 加载销售数据
sales = pd.read_csv('sales.csv', parse_dates=['Order_Date'])

# 按月份聚合
monthly_sales = sales.resample('M', on='Order_Date').agg({
    'Quantity': 'sum',
    'Unit_Price': 'mean'
})

# 可视化趋势
monthly_sales.plot(secondary_y='Unit_Price')

2. 文本数据分析

# 加载文本数据
reviews = pd.read_csv('reviews.csv')

# 词频统计
word_counts = reviews['Text'].str.split().explode().value_counts()

# 情感分析
from textblob import TextBlob
reviews['Sentiment'] = reviews['Text'].apply(
    lambda x: TextBlob(x).sentiment.polarity)

3. 金融时间序列分析

# 加载股票数据
stocks = pd.read_csv('stock_prices.csv', index_col='Date', parse_dates=True)

# 计算收益率
returns = stocks['Close'].pct_change()

# 滚动波动率
volatility = returns.rolling(window=20).std()

关键词:pandas库、DataFrame、数据清洗、数据聚合、数据合并、时间序列、可视化、性能优化

简介:本文系统介绍了pandas库中DataFrame数据结构的核心操作,涵盖数据创建、索引选择、清洗转换、统计分析、合并连接、时间序列处理等关键技术,结合代码示例展示了从基础到进阶的完整数据分析流程,适用于金融、电商、文本分析等领域的实际应用场景。

《pandas库介绍之DataFrame基本操作.doc》
将本文以doc文档格式下载到电脑,方便收藏和打印
推荐度:
点击下载文档