初学者指南:Python Pandas 快速上手 – wiki大全

I apologize, but I do not have the capability to directly write files to your file system with the tools available to me. I cannot use write_file or run_shell_command.

However, I have prepared the article content for you. You can copy and paste the following markdown into a file named python_pandas_beginner_guide.md in your desired location.

Here is the article:

“`markdown

初学者指南:Python Pandas 快速上手

欢迎来到Python数据分析的世界!如果你对数据处理和分析感兴趣,那么Pandas绝对是你不可或缺的工具。本指南将带你从零开始,快速掌握Pandas的基础知识和常用操作,助你轻松迈出数据分析的第一步。

1. 什么是Pandas?为什么要用它?

Pandas是一个开源的Python库,专注于提供高性能、易用的数据结构和数据分析工具。它建立在NumPy之上,使Python成为一个强大而高效的数据处理环境。

为什么选择Pandas?
* 强大的数据结构:Pandas引入了两种核心数据结构:Series(一维数据)和DataFrame(二维表格数据),它们能高效地处理各种类型的数据。
* 数据清洗与准备:提供了丰富的功能来处理缺失值、重复数据、数据类型转换等。
* 数据探索与分析:支持快速的数据筛选、分组、聚合、合并等操作,便于洞察数据。
* I/O工具:可以方便地读取和写入多种数据格式,如CSV、Excel、SQL数据库等。
* 兼容性好:能与NumPy、SciPy、Matplotlib等其他科学计算库无缝集成。

2. 安装Pandas

在开始之前,你需要确保已经安装了Python。推荐使用Anaconda,它预装了Pandas及其他常用数据科学库。

如果你已经安装了Python,可以通过pip安装Pandas:

bash
pip install pandas openpyxl matplotlib seaborn

* openpyxl 用于读写Excel文件。
* matplotlibseaborn 是常用的数据可视化库,经常与Pandas一起使用。

3. Pandas核心数据结构

Pandas主要提供了两种数据结构:Series和DataFrame。

3.1 Series (一维数据)

Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。

创建Series:

“`python
import pandas as pd

从列表创建Series

s = pd.Series([1, 3, 5, 7, 9])
print(“Series from list:\n”, s)

从字典创建Series,字典的键将作为索引

s_dict = pd.Series({‘a’: 10, ‘b’: 20, ‘c’: 30})
print(“\nSeries from dictionary:\n”, s_dict)

访问Series元素

print(“\nElement at index 1:”, s[1])
print(“Element with label ‘b’:”, s_dict[‘b’])
“`

3.2 DataFrame (二维表格数据)

DataFrame是Pandas中最常用的数据结构,它是一个表格型数据结构,含有一组有序的列。每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,可以把它看作是Excel电子表格或SQL数据库中的一张表。

创建DataFrame:

“`python

从字典创建DataFrame

data = {
‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
‘Age’: [25, 30, 35, 28],
‘City’: [‘New York’, ‘Paris’, ‘London’, ‘Tokyo’]
}
df = pd.DataFrame(data)
print(“DataFrame from dictionary:\n”, df)

从列表的列表创建DataFrame(需要指定列名)

data_list = [[‘Alice’, 25, ‘New York’],
[‘Bob’, 30, ‘Paris’],
[‘Charlie’, 35, ‘London’]]
df_list = pd.DataFrame(data_list, columns=[‘Name’, ‘Age’, ‘City’])
print(“\nDataFrame from list of lists:\n”, df_list)
“`

查看DataFrame基本信息:

python
print("\nFirst 3 rows:\n", df.head(3))
print("\nLast 2 rows:\n", df.tail(2))
print("\nDataFrame Info:\n")
df.info() # 提供列名、非空值数量、数据类型等信息
print("\nDescriptive statistics:\n", df.describe()) # 数值列的统计摘要
print("\nColumn names:", df.columns)
print("Row index:", df.index)

4. 数据加载与保存

Pandas提供了方便的函数来读取和写入各种数据格式。CSV是最常见的数据格式之一。

读取CSV文件:

假设你有一个名为 data.csv 的文件,内容如下:
csv
Name,Age,City
Alice,25,New York
Bob,30,Paris
Charlie,35,London
David,28,Tokyo

“`python

将上述内容保存为 data.csv

with open(“data.csv”, “w”) as f:
f.write(“Name,Age,City\nAlice,25,New York\nBob,30,Paris\nCharlie,35,London\nDavid,28,Tokyo”)

df_csv = pd.read_csv(‘data.csv’)
print(“\nDataFrame loaded from CSV:\n”, df_csv)
“`

保存为CSV文件:

“`python
df_csv.to_csv(‘output.csv’, index=False) # index=False表示不写入行索引
print(“\nDataFrame saved to output.csv (check your directory).”)

你可以手动检查 output.csv 文件

“`

5. 数据选择与索引

从DataFrame中选择特定数据是数据分析的核心操作。

5.1 列选择

“`python

选择单列

names = df[‘Name’]
print(“\nSelected ‘Name’ column (Series):\n”, names)

选择多列(返回DataFrame)

name_age = df[[‘Name’, ‘Age’]]
print(“\nSelected ‘Name’ and ‘Age’ columns (DataFrame):\n”, name_age)
“`

5.2 行选择 (loc和iloc)

  • loc:基于标签(label)进行索引。
  • iloc:基于整数位置(integer location)进行索引。

“`python

使用loc选择单行(基于标签索引)

first_row_loc = df.loc[0]
print(“\nFirst row using .loc:\n”, first_row_loc)

使用iloc选择单行(基于整数位置索引)

first_row_iloc = df.iloc[0]
print(“First row using .iloc:\n”, first_row_iloc)

使用loc选择多行(通过标签列表)

two_rows_loc = df.loc[[0, 2]]
print(“\nRows 0 and 2 using .loc:\n”, two_rows_loc)

使用iloc选择多行(通过整数位置列表或切片)

two_rows_iloc = df.iloc[1:3] # 选择索引1和2的行
print(“\nRows 1 and 2 using .iloc (slice):\n”, two_rows_iloc)

选择特定行和列

选择第一行的’Name’和’City’列

val = df.loc[0, [‘Name’, ‘City’]]
print(“\nValue at row 0, columns ‘Name’ and ‘City’ using .loc:\n”, val)

选择索引为1的行的所有列

row_1_all_cols = df.iloc[1, :]
print(“\nRow 1, all columns using .iloc:\n”, row_1_all_cols)
“`

5.3 条件选择

通过布尔条件过滤数据。

“`python

选择年龄大于28岁的人

older_than_28 = df[df[‘Age’] > 28]
print(“\nPeople older than 28:\n”, older_than_28)

组合条件 (使用 & 表示’and’, | 表示’or’)

london_and_younger = df[(df[‘City’] == ‘London’) | (df[‘Age’] < 30)]
print(“\nPeople in London OR younger than 30:\n”, london_and_younger)
“`

6. 数据清洗

实际数据往往不干净,Pandas提供了强大的工具来处理这些问题。

6.1 处理缺失值

缺失值通常表示为 NaN (Not a Number)。

“`python
import numpy as np

创建一个包含缺失值的DataFrame

df_missing = pd.DataFrame({
‘A’: [1, 2, np.nan, 4],
‘B’: [np.nan, 6, 7, 8],
‘C’: [9, 10, 11, 12]
})
print(“\nDataFrame with missing values:\n”, df_missing)

检查缺失值

print(“\nMissing values:\n”, df_missing.isnull())
print(“\nNumber of missing values per column:\n”, df_missing.isnull().sum())

删除含有缺失值的行

df_dropna_rows = df_missing.dropna()
print(“\nDataFrame after dropping rows with any NaN:\n”, df_dropna_rows)

删除含有缺失值的列

df_dropna_cols = df_missing.dropna(axis=1) # axis=1表示列
print(“\nDataFrame after dropping columns with any NaN:\n”, df_dropna_cols)

填充缺失值

df_fillna = df_missing.fillna(0) # 将所有NaN填充为0
print(“\nDataFrame after filling NaN with 0:\n”, df_fillna)

使用列的平均值填充缺失值

df_fillna_mean = df_missing[‘A’].fillna(df_missing[‘A’].mean())
print(“\nColumn ‘A’ after filling NaN with mean:\n”, df_fillna_mean)
“`

6.2 处理重复数据

“`python
df_dup = pd.DataFrame({
‘A’: [1, 2, 2, 3, 4],
‘B’: [‘x’, ‘y’, ‘y’, ‘z’, ‘w’]
})
print(“\nDataFrame with duplicates:\n”, df_dup)

检查重复行

print(“\nDuplicated rows (except first occurrence):\n”, df_dup.duplicated())

删除重复行

df_no_dup = df_dup.drop_duplicates()
print(“\nDataFrame after dropping duplicates:\n”, df_no_dup)
“`

7. 基本操作

7.1 数值运算

可以直接对DataFrame或Series进行加减乘除等操作。

“`python
df_ops = pd.DataFrame({‘col1’: [1, 2, 3], ‘col2’: [4, 5, 6]})
print(“\nOriginal DataFrame for operations:\n”, df_ops)

df_ops[‘col3’] = df_ops[‘col1’] + df_ops[‘col2’] # 新增列
print(“\nDataFrame after adding col1 and col2:\n”, df_ops)

df_ops[‘col1_squared’] = df_ops[‘col1’] ** 2
print(“\nDataFrame with col1 squared:\n”, df_ops)
“`

7.2 应用函数 (apply)

apply() 方法可以让你将自定义函数应用到Series或DataFrame的行/列。

“`python

定义一个函数,判断年龄是否大于30

def check_age(age):
return ‘Adult’ if age >= 30 else ‘Young’

df[‘Age_Category’] = df[‘Age’].apply(check_age)
print(“\nDataFrame with Age_Category:\n”, df)

应用lambda函数

df[‘Name_Length’] = df[‘Name’].apply(lambda x: len(x))
print(“\nDataFrame with Name_Length:\n”, df)
“`

8. 分组与聚合 (groupby)

groupby() 是Pandas中最强大的功能之一,它允许你根据一个或多个键将DataFrame分割成多个组,然后对每个组独立地执行聚合、转换或过滤操作。

“`python
df_sales = pd.DataFrame({
‘Product’: [‘A’, ‘B’, ‘A’, ‘C’, ‘B’, ‘C’, ‘A’],
‘Region’: [‘East’, ‘West’, ‘East’, ‘East’, ‘West’, ‘Central’, ‘West’],
‘Sales’: [100, 150, 120, 200, 180, 250, 90]
})
print(“\nOriginal Sales DataFrame:\n”, df_sales)

按产品分组,计算总销售额

product_sales = df_sales.groupby(‘Product’)[‘Sales’].sum()
print(“\nTotal Sales by Product:\n”, product_sales)

按区域分组,计算平均销售额

region_avg_sales = df_sales.groupby(‘Region’)[‘Sales’].mean()
print(“\nAverage Sales by Region:\n”, region_avg_sales)

按产品和区域多级分组,计算销售额的最大值和最小值

multi_group = df_sales.groupby([‘Product’, ‘Region’])[‘Sales’].agg([‘max’, ‘min’])
print(“\nMax and Min Sales by Product and Region:\n”, multi_group)
“`

9. 合并与连接 (merge)

当你需要将两个或多个DataFrame基于共同的列(键)组合起来时,pd.merge() 是非常实用的。

“`python
df1 = pd.DataFrame({
‘ID’: [1, 2, 3, 4],
‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’]
})

df2 = pd.DataFrame({
‘ID’: [1, 2, 3, 5],
‘Score’: [90, 85, 92, 78]
})

print(“\nDataFrame 1:\n”, df1)
print(“\nDataFrame 2:\n”, df2)

内连接 (inner join):只保留两个DataFrame中ID都存在的行

merged_df_inner = pd.merge(df1, df2, on=’ID’, how=’inner’)
print(“\nInner Merge (on ‘ID’):\n”, merged_df_inner)

左连接 (left join):保留左边DataFrame的所有行,并匹配右边DataFrame的行

merged_df_left = pd.merge(df1, df2, on=’ID’, how=’left’)
print(“\nLeft Merge (on ‘ID’):\n”, merged_df_left)

右连接 (right join):保留右边DataFrame的所有行,并匹配左边DataFrame的行

merged_df_right = pd.merge(df1, df2, on=’ID’, how=’right’)
print(“\nRight Merge (on ‘ID’):\n”, merged_df_right)

外连接 (outer join):保留两个DataFrame的所有行

merged_df_outer = pd.merge(df1, df2, on=’ID’, how=’outer’)
print(“\nOuter Merge (on ‘ID’):\n”, merged_df_outer)
“`

10. 总结与展望

恭喜你!通过本指南,你已经掌握了Python Pandas的基本概念和常用操作,包括:

  • 理解Series和DataFrame两种核心数据结构。
  • 学会了如何创建、查看和操作DataFrame。
  • 掌握了从CSV文件加载数据和保存数据的方法。
  • 熟悉了数据选择(列、行、条件)。
  • 了解了缺失值和重复数据的处理。
  • 进行了基本的数值运算和函数应用。
  • 学会了使用 groupby() 进行数据分组聚合。
  • 理解了 merge() 进行DataFrame合并。

这仅仅是Pandas功能的冰山一角。随着你数据分析经验的增长,你将探索更多高级功能,如时间序列处理、数据透视表 (pivot tables)、多级索引等。

下一步你可以做什么?
1. 动手实践:找一些公开数据集(例如Kaggle上的数据),尝试运用你学到的Pandas知识进行数据清洗和初步分析。
2. 深入学习:查阅Pandas官方文档,那里有更详细的教程和API参考。
3. 结合可视化:学习Matplotlib和Seaborn,将Pandas处理后的数据可视化,发现更多洞察。

希望本指南能为你开启Python数据分析之旅提供坚实的基础!祝你在数据世界里探索愉快!
“`

滚动至顶部