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之后,你会发现处理数据就像玩游戏一样轻松愉快!

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

相关推荐
测试19984 分钟前
postman测试文件上传接口详解
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
eqwaak016 分钟前
基于大语言模型的智能音乐创作系统——从推荐到生成
人工智能·爬虫·python·语言模型·自然语言处理·自动化
joker学java19 分钟前
java基础快速入门07
后端
onejason20 分钟前
使用Python爬虫获取淘宝App商品详情
前端·python
uhakadotcom20 分钟前
了解Pulumi:基础设施即代码的新选择
后端·面试·github
微臣愚钝21 分钟前
【15】Selenium 爬取实战
爬虫·python·selenium
fliter27 分钟前
性能比拼: TCP vs UDP(重大改进)
后端
林川的邹29 分钟前
如何根据场景判断是使用ArrayList还是LinkedList?
java·后端
Postkarte不想说话32 分钟前
ZLMediaKit搭建直播平台
后端
船长@Quant32 分钟前
VectorBT:使用PyTorch+LSTM训练和回测股票模型 进阶三
pytorch·python·深度学习·lstm·量化策略·sklearn·量化回测