Pandas:从入门到精通,只需这一篇就够了!

花姐来也! 各位看官老爷们,今天咱们就来聊聊Python界的大熊猫------Pandas! 别看它名字萌萌哒,功能可是杠杠的!保证让你看完这篇文章,也变成Pandas高手!

1. 总览

Pandas,一个强大的数据分析和处理工具,就像一位全能管家,能帮你轻松搞定各种数据问题。无论是数据清洗、转换,还是分析、可视化,它都能手到擒来。

2. Pandas有关库

Pandas主要依赖于NumPy,就像盖房子需要钢筋水泥一样。NumPy提供了高效的数组运算能力,让Pandas在处理大量数据时也能保持飞一般的速度。

3. 调用Pandas库

python 复制代码
import pandas as pd
import numpy as np # 顺手也把NumPy导入了,后面要用到

细节: pandas 行业内默认用pd缩写,numpy默认用np缩写,所以在写项目时尽量用行业内默认值,这样便于后期的代码可读性和可维护性。

4. Pandas的数据结构

Pandas有两种主要的数据结构:Series和DataFrame。

  • Series: 就像一维数组,带标签的数组,每个元素都有一个对应的索引。你可以把它想象成一列数据,比如一个班级学生的成绩。
  • DataFrame: 就像一张表格,由多个Series组成,每个Series代表一列数据。你可以把它想象成一个Excel表格,有行有列,非常方便。

5. 调用/读取数据

Pandas支持多种数据格式的读取,比如CSV、Excel、JSON、SQL、HTML等。

  • CSV:
python 复制代码
df = pd.read_csv('data.csv')
  • Excel:
python 复制代码
df = pd.read_excel('data.xlsx')
  • 其他(JSON、SQL、HTML):
python 复制代码
df = pd.read_json('data.json')
df = pd.read_sql('SELECT * FROM table', connection)
df = pd.read_html('data.html')

细节: 读取CSV文件时,如果遇到编码问题,可以尝试指定encoding参数,比如encoding='gbk'encoding='utf-8'

6. 数据存储

python 复制代码
df.to_csv('output.csv', index=False) # index=False表示不保存索引列
df.to_excel('output.xlsx', index=False)

7. 创建测试对象

python 复制代码
data = {'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 28]}
df = pd.DataFrame(data)
print(df) # 打印结果
-------------------
      name  age
0    Alice   25
1      Bob   30
2  Charlie   28

8. 统计数据函数

python 复制代码
import pandas as pd
import numpy as np

# 创建一个示例DataFrame
data = {'A': [1, 2, 3, 4, 5],
        'B': [10, 20, 30, 40, 50],
        'C': [100, 200, 300, 400, 500]}
df = pd.DataFrame(data)

# df.info():查看DataFrame的基本信息
print(df.info())

# df.shape:查看DataFrame的行数和列数
print(df.shape)

# df.index:查看DataFrame的索引
print(df.index)

# df.columns:查看DataFrame的列名
print(df.columns)

# df.sum():计算每列的总和
print(df.sum())

# df.min():计算每列的最小值
print(df.min())

# df.max():计算每列的最大值
print(df.max())

# df.idxmin():返回每列最小值对应的索引
print(df.idxmin())

# df.idxmax():返回每列最大值对应的索引
print(df.idxmax())

# df.describe():生成每列的统计摘要
print(df.describe())

# df.mean():计算每列的均值
print(df.mean())

# df.median():计算每列的中位数
print(df.median())

# df.quantile([0.25, 0.75]):计算每列的四分位数
print(df.quantile([0.25, 0.75]))

# df.var():计算每列的方差
print(df.var())

# df.std():计算每列的标准差
print(df.std())

# df.cummax():计算每列的累计最大值
print(df.cummax())

# df.cummin():计算每列的累计最小值
print(df.cummin())

# df['C'].cumprod():计算C列的累计乘积
print(df['C'].cumprod())

# len(df):计算DataFrame的行数
print(len(df))

# df.isnull():检查DataFrame中的空值
print(df.isnull())

# df.corr():计算DataFrame中各列之间的相关性
print(df.corr())

细节: df.describe()函数非常强大,可以快速了解数据的整体分布情况。

9. Pandas中的选择和过滤

python 复制代码
import pandas as pd
import numpy as np

# 创建一个示例DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
        'age': [25, 30, 28, 35, 22],
        'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou']}
df = pd.DataFrame(data)

# series['index']:选择Series中指定索引的元素
print(df['name'][0])

# df.loc[n:n]:选择DataFrame中指定行范围的数据
print(df.loc[1:3])

# df['columnName']:选择DataFrame中指定列的数据
print(df['age'])

# df['columnName'][n]:选择DataFrame中指定列和行的数据
print(df['city'][2])

# df['columnName'].nunique():计算指定列的唯一值数量
print(df['city'].nunique())

# df['columnName'].unique():返回指定列的唯一值
print(df['city'].unique())

# df.columnName:选择DataFrame中指定列的数据(另一种写法)
print(df.age)

# df['columnName'].value_counts(dropna=False):计算指定列中每个值的出现次数
print(df['city'].value_counts())

# df.head(n):返回DataFrame的前n行
print(df.head(3))

# df.tail(n):返回DataFrame的后n行
print(df.tail(2))

# df.sample(n):随机返回DataFrame的n行
print(df.sample(3))

# df.sample(frac=0.5):随机返回DataFrame的50%行
print(df.sample(frac=0.5))

# df.nlargest(n, 'columnName'):返回指定列中最大的n行
print(df.nlargest(2, 'age'))

# df.nsmallest(n, 'columnName'):返回指定列中最小的n行
print(df.nsmallest(2, 'age'))

# df[df.columnName < n]:返回指定列中小于n的行
print(df[df.age < 30])

# df[['columnName', 'columnName']]:选择DataFrame中指定的多个列
print(df[['name', 'city']])

# df.loc[:, "columnName1":"columnName2"]:选择DataFrame中指定列范围的数据
print(df.loc[:, 'age':'city'])

# Create Filter:创建过滤器
filter = df['age'] > 25
print(df[filter])

# df.filter(regex='e'):使用正则表达式过滤列名
print(df.filter(regex='e'))

# np.logical_and:使用NumPy的逻辑与
print(df[np.logical_and(df['age'] > 25, df['city'] == 'Shanghai')])

# Filtering with &:使用&进行过滤
print(df[(df['age'] > 25) & (df['city'] == 'Shanghai')])

细节: df.locdf.iloc的区别:df.loc 使用标签(行名和列名)选择数据,而 df.iloc 使用整数位置(行号和列号)选择数据。

10. 数据排序

python 复制代码
import pandas as pd

# 创建一个示例DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie'],
        'age': [25, 30, 28]}
df = pd.DataFrame(data)

# df.sort_values('columnName'):按指定列的值进行排序
print(df.sort_values('age'))

# df.sort_values('columnName', ascending=False):按指定列的值进行降序排序
print(df.sort_values('age', ascending=False))

# df.sort_index():按索引进行排序
df = df.set_index('name') #将name设置为索引
print(df.sort_index())

11. 重命名列、定义新的列、修改列

python 复制代码
import pandas as pd

# 创建一个示例DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie'],
        'age': [25, 30, 28]}
df = pd.DataFrame(data)

# df.rename(columns={'columnName': 'newColumnName'}):重命名列名
print(df.rename(columns={'name': '姓名'}))

# 定义新列:df['newColumn'] = [1, 2, 3]
df['gender'] = ['F', 'M', 'M']
print(df)

# 改变索引名称:df.index = ['a', 'b', 'c']
df.index = ['a', 'b', 'c']
print(df)

# 所有列名变小写字母:df.columns = df.columns.str.lower()
df.columns = ['Name', 'Age', 'Gender']
df.columns = df.columns.str.lower()
print(df)

# 所有列名变大写字母:df.columns = df.columns.str.upper()
df.columns = df.columns.str.upper()
print(df)

12. 数据删除

python 复制代码
import pandas as pd

# 创建一个示例DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie'],
        'age': [25, 30, 28]}
df = pd.DataFrame(data)

# df.drop(columns=['columnName']):删除指定列
print(df.drop(columns=['age']))

# Series.drop(['index']):删除Series中指定的索引
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
print(s.drop(['b']))

# 删除指定行:df.drop([0, 1])
print(df.drop([0, 1]))

# 删除一个变量:del df['columnName']
del df['age']
print(df)

13. 数据类型转换

python 复制代码
import pandas as pd

# 创建一个示例DataFrame
data = {'age': ['25', '30', '28']}
df = pd.DataFrame(data)

# df.dtypes:查看DataFrame中每列的数据类型
print(df.dtypes)

# df['columnName'] = df['columnName'].astype('dataType'):转换指定列的数据类型
df['age'] = df['age'].astype(int)
print(df.dtypes)

# pd.melt(frame=dataFrameName, id_vars='columnName', value_vars=['columnName']):将DataFrame从宽格式转换为长格式
data = {'day': ['Mon', 'Tue', 'Wed'],
        'city': ['Beijing', 'Shanghai', 'Guangzhou'],
        'temperature': [25, 30, 28]}
df = pd.DataFrame(data)
print(pd.melt(df, id_vars='day', value_vars=['city', 'temperature']))

14. Apply函数

python 复制代码
import pandas as pd

# 创建一个示例DataFrame
data = {'age': [25, 30, 28]}
df = pd.DataFrame(data)

# Method1:使用lambda函数
df['age_plus_10'] = df['age'].apply(lambda x: x + 10)
print(df)

# Method2:自定义函数
def add_10(x):
    return x + 10

df['age_plus_10_v2'] = df['age'].apply(add_10)
print(df)

怎么样,各位看官老爷们,是不是感觉Pandas也没有想象中那么难? 其实,只要你多敲代码,多练习,就能熟练掌握Pandas的各种技巧。 相信我,当你熟练掌握Pandas之后,你会发现处理数据就像玩游戏一样轻松愉快!

最后,别忘了点赞、转发、收藏哦! 咱们下期再见!

相关推荐
ai小鬼头2 小时前
Ollama+OpenWeb最新版0.42+0.3.35一键安装教程,轻松搞定AI模型部署
后端·架构·github
萧曵 丶3 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
老任与码3 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
蹦蹦跳跳真可爱5894 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij4 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
雷羿 LexChien4 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
华子w9089258594 小时前
基于 SpringBoot+VueJS 的农产品研究报告管理系统设计与实现
vue.js·spring boot·后端
星辰离彬4 小时前
Java 与 MySQL 性能优化:Java应用中MySQL慢SQL诊断与优化实战
java·后端·sql·mysql·性能优化
敲键盘的小夜猫5 小时前
LLM复杂记忆存储-多会话隔离案例实战
人工智能·python·langchain
高压锅_12205 小时前
Django Channels WebSocket实时通信实战:从聊天功能到消息推送
python·websocket·django