Pandas库复习

# -*- coding: utf-8 -*-:
# @Time : 2022/5/17 21:37
# @Author : 刘相圳
# @File : __init__.py.py
# @Software : PyCharm
'''
pandas库 是一个强大的分析结构化数据的工具集; 它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。
pandas中常见的数据结构: Series:类似一维数组的对象   DataFrame:类似多维数组;每列数据可以是不同的类型;索引包括列索引和行索引。
'''
import pandas as pd
'''
pandas 数据结构:Series  类似表格中的一个列(column),类似于一维数组,可以保存任何数据
pandas.Series(data,index,dtype,name,copy)
data: 一组数据(ndarray类型)
index: 数据索引标签,如果不指定,默认从0开始
dtype: 数据类型,默认会自己判断
name: 设置名称
copy: 拷贝数据、默认为False
'''
a = [1,2,3]
myvar = pd.Series(a)
myvar[1]
'''
打印的结果为: 第一列为索引  第二列为数据  没有指定索引  索引值就从0开始
0 1
1 2
2 3
'''
a = ["Google","Runoob","Wiki"]
myvar = pd.Series(a,index = ["x","y","z"])
myvar
myvar['y']
# 可以直接使用key/value对象,类似字典来创建Series
sites = {1:"Goole",2:"Runoob",3:"Wiki"}
myvar = pd.Series(sites)
# 如果我们只需要字典的一部分数据,只需要指定需要数据的索引即可,如下实例:
site = {1:"Google",2:"Runoob",3:"Wiki"}
myvar = pd.Series(sites,index = [1,2])
# 设置Series参数名
sites = {1:"Google",2:"Runoob",3:"Wiki"}
myvar = pd.Series(sites,index = [1,2],name="RUNOOB-Series-TEST")
'''
pandas数据结构DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。
DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
DataFrame构造方法如下: pandas.DataFrame(data,index,columns,dtype,copy)
data:一组数据(ndarray、series、map、lists、dict等类型)
index:索引值,或者可以称为行标签
columns:列表签,默认为RangeIndex(0,1,2,....,n)
dtype:数据类型
copy:拷贝数据,默认为False
Pandas DataFrame是一个二维的数组结构,类似于二维数组
'''
data = [['Google',10],['Runoob',12],['Wiki',13]]
df = pd.DataFrame(data,columns=['Site','Age'])
# 可以使用字典(key/value),其中字典的key为列名
data = [{'a':1,'b':2},{'a':5,'b':10,'c':20}]
df = pd.DataFrame(data)
# Pandas 可以使用loc属性来返回指定行的数据,如果没有设置索引,第一行索引为0,第二行索引为1,以此类推:
data = { # 此处两个数组长度必须一样 否则会报错
    "calories": [420,380,390],
    "duration": [50,40,45]
}
# 将数据载入到DataFrame对象
df = pd.DataFrame(data)
# 返回第一行 第二行  第三行
# note:返回的结果其实是Pandas Series数据。也可以返回多行数据,使用[[...]]格式,...为各行的索引,以逗号隔开;
df.loc(0)
df.loc(1)
# 返回结果其实是Pandas DataFrame数据
df.loc[[0,1]]
data = {
    "calories": [420,380,390],
    "duration": [50,40,45]
}
# index中所指引的是行索引的值
df = pd.DataFrame(data,index = ["day1","day2","day3"])
# 返回指定索引对应的某一行
df.loc["day2"]
'''
Pandas CSV 文件: 逗号分隔值,有时候也称为字符分隔值,其文件以纯文本形式存储表格数据(数据和文本)!
Pandas可以很方便的处理csv文件。
'''
# 读出csv文件
df = pd.read_csv('nba.csv')
# 使用to_csv()方法将DataFrame存储为csv文件
# 三个字段 name,site,age
name = ["Google","Runoob","Taobao","Wiki"]
st = ["www.google.com","www.runoob.com","www.taobao.com","www.wikipedia.org"]
ag = [90,40,80,98]
# 字典
dict = {'name':name,'site':st,'age':ag}
df = pd.DataFrame(dict)
# 保存 dataframe
df.to_csv('site.csv')
# 读取前面10行
df = pd.read_csv("nba.csv")
df.head(10)
# 读取末尾10行 note: head读取开头 tail读取末尾 若两者均没有填写参数 则默认为读取5行
df.tail(10)
# to_string()用于返回DataFrame类型的数据
df = pd.read_json('sites.json')
df.to_string()
# 我们也可以直接处理JSON字符串
data =[
    {
      "id": "A001",
      "name": "菜鸟教程",
      "url": "www.runoob.com",
      "likes": 61
    },
    {
      "id": "A002",
      "name": "Google",
      "url": "www.google.com",
      "likes": 124
    },
    {
      "id": "A003",
      "name": "淘宝",
      "url": "www.taobao.com",
      "likes": 45
    }
]
df = pd.DataFrame(data)
# JSON对象与Python字典具有相同的格式,所以我们可以直接将python字典转换为DataFrame数据:
# 字典格式的JSON
s = {
    "col1":{"row1":1,"row2":2,"row3":3},
    "col2":{"row1":"x","row2":"y","row3":"z"}
}
# 读取JSON转为DataFrame
df = pd.DataFrame(s)
# 从URL中读取JSON数据
URL = 'https://static.runoob.com/download/sites.json'
df = pd.read_json(URL)
'''
Pandas数据清洗:
数据清洗是对一些没有用的数据进行处理的过程。
很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。
在这个教程中,我们将利用 Pandas包来进行数据清洗。
Pandas清洗空值:如果我们要删除包含空字段的行,可以使用dropna()方法,语法格式如下:
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。
how:默认为 'any' 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how='all' 一行(或列)都是 NA 才去掉这整行。
thresh:设置需要多少非空值的数据才可以保留下来的。
subset:设置想要检查的列。如果是多个列,可以使用列名的list作为参数.
inplace:如果设置True,将计算得到的值直接覆盖之前的值并返回None,修改的是源数据。
'''
df = pd.read_csv('property-data.csv')
# 可通过isnull()判断各个单元格是否为空。
# 下面两行代码是为了作比较
df['NUM_BEDROOMS']
df['NUM_BEDROOMS'].isnull()
# 如果将上述数据打印我们可知  pandas将n/a和NA当作空数据,na不是空数据,不符合我们要求,我们可以指定空数据类型
new_df = df.dropna() # 默认情况下dropna()方法返回一个新的DataFrame,不会修改源数据。  修改源数据DataFrame则使用inplace=True
new_df.to_string()
# 移除指定列有空值的行 如果你要修改源数据DataFrame 可以使用inplace=True参数
df.dropna(subset=['ST_NUM'],inplace = True)
df.to_string()
# 移除ST_NUM列中字段值为空的行;
df = pd.read_csv('property-data.csv')
df.dropna(subset=['ST_NUM'],inplace = True)
df.to_string()
# 使用12345替换空字段
df = pd.read_csv('property-data.csv')
df.fillna(12345,inplace=True)
df.to_string()
# 使用mean()方法计算列的均值并替换空单元格
df = pd.read_csv('property-data.csv')
x = df["ST_NUM"].mean() # 算出ST_NUM的平均值   并用ST_NUM的平均值替换ST_NUM列中的空格
df["ST_NUM"].fillna(x,inplace = True) # 利用均值X去替换ST_NUM列中的内容
df.to_string
# 用median()方法计算列的中位数并替换空单元格
df = pd.read_csv('property-data.csv')
x = df["ST_NUM"].median()
df["ST_NUM"].fillna(x,inplace = True)
df.to_string
'''
Pandas 清洗格式错误数据
数据格式错误的单元格会使数据分析变得困难,甚至不可能。
我们可以通过包含空单元格的行,或者将列中的所有单元格转换为相同格式的数据。
以下实例会格式化日期(note: 格式化日期)
'''
# 第三个日期格式化错误
data = {
    "Date": ['2020/12/01','2020/12/02','20201226'],
    "duration": [50,40,45]
}
df = pd.DataFrame(data,index= ["day1","day2","day3"])
df['Date'] = pd.to_datetime(df['Date']) # 日期格式化  to_datetime
df.to_string
'''
Pandas 清洗错误数据
数据错误也是很常见的情况,我们可以对错误的数据进行替换或移除。
以下实例会替换错误年龄的数据:
'''
person = {
    "name": ['Google','Runoob','Taobao'],
    "age": [50,40,12345] # 12345 年龄数据是错误的
}
df = pd.DataFrame(person) # 将person字典型数据转换为pandas中的DataFrame类型数据
df.loc[2,'age'] = 30 # 修改数据 loc返回具体的某一行
df.to_string()
# 将age大于120的设置为120
person = {
    "name": ['Google','Runoob','Taobao'],
    "age": [50,200,12345]
}
df = pd.DataFrame(person)
for x in df.index:
    if df.loc[x,"age"] > 120:
        df.loc[x,"age"] = 120
df.to_string
'''
pandas清洗重复数据
如果我们要清洗重复数据,可以使用 duplicated() 和 drop_duplicates() 方法。
如果对应的数据是重复的,duplicated() 会返回 True,否则返回 False。
'''
person = {
    "name": ['Google','Runoob','Runoob','Taobao'],
    "age": [50,40,40,23]
}
df = pd.DataFrame(person)
df.duplicated()
# 删除重复数据,可以直接使用drop_duplicates()方法
df.drop_duplicates(inplace = True)
df # df为已经删除重复数据的DataFrame
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

午觉千万别睡过

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值