Pandas基本用法

目录

数据读取

数据清洗

数据清洗中的其他用法:

数据分组

数据排序

应用函数


pip install pandas

sklearn.preprocessing是scikit-learn中的一个模块,用于数据预处理,包括标准化、缺失值填充、特征提取、特征选择等。要安装该模块,可以使用以下命令:

pip install -U scikit-learn

建议大家在学习数据分析时sklearn-learn模块也一并安装好

后续的学习操作会方便很多哦~

可能直接pip install pandas 仍然会有部分pandas库内函数无法使用,大概率是因为版本的问题,只需要多执行一个命令将其更新即可解决;

pip install pandas --upgrade

——这样就是更新完成了 

数据读取

一般是 .csv文件  .xlsx文件(excel文件) .json文件

import pandas as pd

# 读取csv文件
data = pd.read_csv('data.csv')

# 读取excel文件
data = pd.read_excel('data.xlsx')

# 读取json文件
data = pd.read_json('data.json')

数据清洗

我的原始test.xlsx文件如下图:

使用pandas库的fillna函数填充缺失值

其中函数会默认某些值为缺失值(如该列有值而该格为空的值,同时若表头无名也会补充名字unnamed:xx),其他缺失值可以由我们自己通过一个列表设定 

import pandas as pd
# 可能会报错--缺少某个包 pip install openpyxl

in_FileName = input()
data = pd.read_excel(in_FileName,na_values=['None'])
# na_values参数可以设定我们自定义的缺失值


# 填充缺失值
data = data.fillna(0)
# pandas库中大多数操作是不会直接对原数据直接改动的,会返回一个新的对象
# 此处要看到效果的话可以另存一个新文件并打开
new_FileName = input() + '.xlsx'

data.to_excel(new_FileName,index=False)

初步填充后效果图如下:

数据清洗中的其他用法:

import pandas as pd
# 可能会报错--缺少某个包 pip install openpyxl

in_FileName = input()
data = pd.read_excel(in_FileName,na_values=['None'])

# 进行xlsx替换/填充时,如果要显示非数字字符,要将原表中的单元格格式设置为文本模式,不然看不到替换/填充后的值

# data.dropna和data.fillna函数中都可以设置inplace=‘True’来对原表数据直接修改,而不需要用新对象接收
# 实际操作中建议先用一个对象接收避免不可预料的数据丢失和错误

new_FileName_ = input()

# 填充和删除时默认的axis=0,也就是默认删除/填充行,设置为axis=1则表示删除/填充列

# 填充缺失值
data_fill = data.fillna(0)
# pandas库中大多数操作是不会直接对原数据直接改动的,会返回一个新的对象
# 此处要看到效果的话可以另存一个新文件并打开
# data.to_excel(new_FileName_+'fill.xlsx',index=False)

# 删除缺失值
data_delete = data.dropna()
# data_delete.to_excel(new_FileName_+'delete.xlsx',index=False)

# 替换值
data_change = data.replace({'None': '*****'})
# data_change.to_excel(new_FileName_+'change.xlsx',index=False)

# 观看表前五行的数据
# print(data_change.head())

# 去重 用subset参数设置指定的列去重,若在该列上值相同,则涉及到重复的单元格所在的一整行都会被删除
# keep表示只保留重复的第一个值
# 为了准确指定subset列表中的的值(例如数字1和字符'1'的区分),可以用data.columns查看该表的列名
print(data.columns)
data_dup = data.drop_duplicates(subset =[1],keep='first')
# data_dup.to_excel(new_FileName_+'dup.xlsx',index=False)

数据分组

import pandas as pd

# 定义示例数据
data = {
    '城市': ['北京', '北京', '上海', '上海', '广州', '广州'],
    '日期': ['2021-01-01', '2021-01-02', '2021-01-01', '2021-01-02', '2021-01-01', '2021-01-02'],
    '销售额': [100, 200, 300, 400, 500, 600]
}
df = pd.DataFrame(data)

# 查看原始数据
print(df)
#    城市          日期  销售额
# 0  北京  2021-01-01  100
# 1  北京  2021-01-02  200
# 2  上海  2021-01-01  300
# 3  上海  2021-01-02  400
# 4  广州  2021-01-01  500
# 5  广州  2021-01-02  600

# 按城市进行分组,并计算每个城市的销售额均值
df_grouped = df.groupby('城市')['销售额'].mean()

# 查看分组结果
print(df_grouped)
# 城市
# 上海    350.0
# 北京    150.0
# 广州    550.0
# Name: 销售额, dtype: float64

通过groupby后的小括号设置分组标准,中括号设置分组后提取的数据,同时调用了sum()函数对数据求和 

import pandas as pd

data = {
    'name':['Xiaolin','Xiaoqie','Xiaoming','Xiaolin'],
    'time':['4.10','4.11','4.12','4.13'],
    'pay':[100,110,120,90]
}
# 将自己定义的数据变为pandas中的表格
data = pd.DataFrame(data)

result_1 = data.groupby('name')['pay'].sum()
print(result_1)
# name
# Xiaolin     190
# Xiaoming    120
# Xiaoqie     110
# Name: pay, dtype: int64

# 如按多个列分组则需传入列表
result_2 = data.groupby(['name','time'])['pay'].sum()
print(result_2)
# name      time
# Xiaolin   4.10    100
#           4.13     90
# Xiaoming  4.12    120
# Xiaoqie   4.11    110
# Name: pay, dtype: int64

可以使用agg函数对每组数据进行统计分析,也可以使用apply函数对每组数据进行自定义的计算

对agg函数的具体补充:

  1. 字符串:使用字符串作为键名可以将要应用的聚合函数的名称直接传递给 agg() 方法。例如,agg('mean') 表示应用平均函数来聚合分组数据。可以使用的聚合函数名称包括 'count''sum''mean''median''min''max' 等。

  2. 元组:使用元组作为键名可以将要应用的聚合函数和列重命名传递给 agg() 方法。例如,agg(('mean','average_score')) 表示应用平均函数来聚合分组数据,并将聚合结果列重命名为 'average_score'

  3. 字典:使用字典作为键名可以对不同的列应用不同的聚合函数。例如,agg({'score':'mean', 'age':'max'}) 表示对 score 列应用平均函数来聚合分组数据,并对 age 列应用最大函数来聚合分组数据。

import pandas as pd
# 创建一个字典,包含姓名、性别、年龄、城市和薪水
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emma'],
    'Gender': ['Female', 'Male', 'Male', 'Male', 'Female'],
    'Age': [25, 30, 35, 40, 45],
    'City': ['New York', 'San Francisco', 'Los Angeles', 'Chicago', 'Boston'],
    'Salary': [50000, 60000, 70000, 80000, 90000]
}
# 将字典转换为数据框
df = pd.DataFrame(data)
# 按性别分组并计算平均年龄和平均薪水
grouped = df.groupby('Gender').agg({'Age': 'mean', 'Salary': 'mean'})
# 打印结果
print(grouped)
#          Age   Salary
# Gender               
# Female  35.0  70000.0
# Male    35.0  70000.0

数据排序

import pandas as pd

data = {
    'name':['Alice','Bob','Charlie','David','Eva'],
    'age':[25,19,32,42,28],
    'score':[89,92,85,78,95]
}
data = pd.DataFrame(data)

# 默认升序
data.sort_values(by='age',inplace=True)
print(data)
#       name  age  score
# 1      Bob   19     92
# 0    Alice   25     89
# 4      Eva   28     95
# 2  Charlie   32     85
# 3    David   42     78


# 设置为降序
data.sort_values(by='age',ascending=False,inplace=True,)
print(data)
#       name  age  score
# 3    David   42     78
# 2  Charlie   32     85
# 4      Eva   28     95
# 0    Alice   25     89
# 1      Bob   19     92

# 设置按多个列排序,从左往右按列比,如果相等再继续往右比较下一列的数据,同时ascending参数也要对应设置为对应列的排序规则
data_plus = {
    'name':['ali','bob','eric','jack','blck'],
    'score':[34,35,36,37,38],
    'age':[18,19,18,19,17],
    }
data_plus = pd.DataFrame(data_plus)
data_plus.sort_values(by=['age','score'],ascending=[False,True],inplace=True)
print(data_plus)
#    name  score  age
# 1   bob     35   19
# 3  jack     37   19
# 0   ali     34   18
# 2  eric     36   18
# 4  blck     38   17

# 可以使用 sort_index() 方法按照索引进行排序,例如按照索引降序排序,
data_plus.sort_index(ascending=False,inplace=True)
print(data_plus)
#    name  score  age
# 4  blck     38   17
# 3  jack     37   19
# 2  eric     36   18
# 1   bob     35   19
# 0   ali     34   18

# 可以使用 nlargest() 和 nsmallest() 方法实现部分排序,例如查找分数最高的两个人
top2 = data_plus.nlargest(2,'score')
print(top2)
#    name  score  age
# 4  blck     38   17
# 3  jack     37   19

# 可以自定义函数并返回要比较的值来进行自定义排序,需要传入key参数
# 创建一个列表字典,包含姓名、分数和年龄
data_plus_2 = {
    'name': ['ali', 'bob', 'eric', 'jack', 'blck'],
    'score': [34, 35, 36, 37, 38],
    'age': [18, 19, 18, 19, 17],
}

# 将列表字典转换为数据框
data_plus_2 = pd.DataFrame(data_plus_2)

# 定义一个自定义函数
# key函数应该接受一个Series并返回一个与输入形状相同的Series
# 我的sort_values函数接收的Series是name列,它是一个由字符串组成的一维数组,每个字符串表示一个名字。
# 我的key函数应该返回一个与输入形状相同的Series,也就是说,也应该是一个由字符串组成的一维数组。
# 我的key函数的目的是对每个字符串进行处理,使得排序时按照你想要的规则进行。
def my_func(name):
    return name.map(lambda y: len(y))
# lambda y:len(y)的意思是定义一个匿名函数,它接受一个参数y,返回y的长度。
# map函数的作用是对原数组中的每个元素应用这个函数,得到一个新的数组。
# 所以,name.map(lambda y: len(y))的意思是将原数组中的每个名字替换为它的长度。


# 按照加权平均值对数据框进行升序排序
data_plus_2.sort_values(by='name', key=my_func, ascending=True, inplace=True)

# 打印结果
print(data_plus_2)
#    name  score  age
# 0   ali     34   18
# 1   bob     35   19
# 2  eric     36   18
# 3  jack     37   19
# 4  blck     38   17

应用函数

使用apply()函数导入自定义函数,从而对原数据进行一系列的变换

  1. 数学函数:Pandas 中的 apply() 方法可以使用数学函数来对数据进行处理。例如,可以使用 NumPy 中的 np.exp() 方法对某一列进行指数运算:
  2. 自定义函数:除了使用内置函数,还可以使用自定义函数来进行数据处理。例如,可以定义一个函数来对某一列进行运算:
  3. Lambda 函数:如果只需要对某一列进行简单的运算,可以使用 Lambda 函数来进行处理:
import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# 可以使用 NumPy 中的 np.exp() 方法对某一列进行指数运算:
df['A_exp'] = df['A'].apply(np.exp)

# 可以使用自定义函数来进行数据处理
def my_function(x):
    return x**2 + 5

df['A_squared_plus_5'] = df['A'].apply(my_function)

# Lambda 函数:如果只需要对某一列进行简单的运算,可以使用 Lambda 函数来进行处理
df['A_squared'] = df['A'].apply(lambda x: x**2)


# 需要注意的是,.apply() 方法通常是针对整列进行操作的。
# 如果需要对单个元素进行操作,可以使用 .applymap() 或 .map() 方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值