Pandas入门

本文详细介绍了Pandas在Python中的核心作用,包括数据结构如Series和DataFrame的使用,数据清洗策略,以及CSV和JSON文件的处理。通过实例演示了安装、数据结构创建、空值和格式错误处理以及数据清洗的方法。
摘要由CSDN通过智能技术生成

简介

  • Pandas 是 Python 语言的一个扩展程序库,用于数据分析。
  • Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。
  • Pandas 名字衍生自术语 “panel data”(面板数据)和 “Python data analysis”(Python 数据分析)
  • Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)
  • Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据
  • Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征
  • Pandas 广泛应用在学术、金融、统计学等各个数据分析领域

pandas的应用

  • Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。

数据结构

  • Series 是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。
    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库
    链接: NumPy.
  • DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。

NumPy数据类型

在这里插入图片描述在这里插入图片描述

pandas安装

使用 pip 安装 pandas:

   pip install pandas

安装成功后,我们就可以导入 pandas 包使用:

   import pandas

发现安装失败了,于是,选择在pycharm中File->settings->Project->Python Interpreter中直接添加pandas
实例

   import pandas as pd
   
   mydataset = {
  'sites': ["Google", "Runoob", "Wiki"],
  'number': [1, 2, 3]
   }
   
   myvar = pd.DataFrame(mydataset)
   print(mydataset)
   print(myvar)

运行结果:
在这里插入图片描述
利用DataFrame添加索引,转化为行列结构

Pandas - Series

Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。

Series 由索引(index)和列组成,函数如下:

pandas.Series( data, index, dtype, name, copy)

data:一组数据(ndarray 类型)。
index:数据索引标签,如果不指定,默认从 0 开始。
dtype:数据类型,默认会自己判断。
name:设置名称。
copy:拷贝数据,默认为 False。

实例1:

import pandas as pd

a = [1, 2, 3]

myvar = pd.Series(a)

print(myvar)

print(myvar[1])

运行结果:

0    1
1    2
2    3       
dtype: int64  //数据类型
3  //myvar[1]

实例2:指定索引值

import pandas as pd

a = ["Google", "Runoob", "Wiki"]

myvar = pd.Series(a, index = ["x", "y", "z"])

print(myvar)
print(myvar[y])

运行结果:

x    Google
y    Runoob
z      Wiki
dtype: object
Runoob

实例3:我们也可以使用 key/value 对象,类似字典来创建 Series:

import pandas as pd

sites = {1: "Google", 2: "Runoob", 3: "Wiki"}

myvar = pd.Series(sites, index = [1, 2], name="RUNOOB-Series-TEST" )

print(myvar)

运行结果:

1    Google
2    Runoob
Name: RUNOOB-Series-TEST, dtype: object

Pandas - DataFrame

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。

  • Pandas DataFrame 是一个二维的数组结构,类似二维数组。
  • DataFrame 数据类型一个表格,包含 rows(行) 和 columns(列):
    在这里插入图片描述
  • Pandas 可以使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1
    返回结果其实就是一个 Pandas Series 数据。
  • 也可以返回多行数据,使用 [[ … ]] 格式,… 为各行的索引,以逗号隔开:
    返回结果其实就是一个 Pandas DataFrame 数据
  • 如何获取 dataframe 中其中几列?
    当处理数据时候 series 较多而我们其中只关注其中一些特定的列时候可以使用
print(df[["apple","banana"]])

Pandas CSV 文件

CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
CSV 是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。
Pandas 可以很方便的处理 CSV 文件

import pandas as pd
#import csv
df = pd.read_csv(r'C:\Users\dell\Downloads\nba.csv')

print(df.to_string())
  • to_string() 用于返回 DataFrame 类型的数据,如果不使用该函数,则输出结果为数据的前面 5 行和末尾 5 行,中间部分以 … 代替
  • 导入csv文件,csv库原来是是pycharm自带的,然后导入文件,在路径前面加r,即保持字符原始值的意思,否则报错:
  • SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: tr这个错误,其实引起这个错误的原因就是转义的问题。

我们也可以使用 to_csv() 方法将 DataFrame 存储为 csv 文件

df = pd.DataFrame(dict)
 
# 保存 dataframe
df.to_csv('site.csv')
  • head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行
  • tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN
  • info() 方法返回表格的一些基本信息

Pandas JSON

数据清洗

数据清洗是对一些没有用的数据进行处理的过程。
很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。

Pandas 清洗空值

如果我们要删除包含空字段的行,可以使用 dropna() 方法,语法格式如下:

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

在这里插入图片描述

  • 我们可以通过 isnull() 判断各个单元格是否为空
print (df['NUM_BEDROOMS'].isnull())
  • 以上例子中我们看到 Pandas 把 n/a 和 NA 当作空数据,na 不是空数据,不符合我们要求,我们可以指定空数据类型:
import pandas as pd

missing_values = ["n/a", "na", "--"]
df = pd.read_csv('property-data.csv', na_values = missing_values)

print (df['NUM_BEDROOMS'])
print (df['NUM_BEDROOMS'].isnull())
  • 我们也可以 fillna() 方法来替换一些空字段:
df.fillna(12345, inplace = True)

df['PID'].fillna(12345, inplace = True)

print(df.to_string())
  • 替换空单元格的常用方法是计算列的均值、中位数值或众数。
    Pandas使用 mean()、median() 和 mode() 方法计算列的均值(所有值加起来的平均值)、中位数值(排序后排在中间的数)和众数(出现频率最高的数)
x = df["ST_NUM"].mean()

df["ST_NUM"].fillna(x, inplace = True)

Pandas 清洗格式错误数据

# 第三个日期格式错误
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'])

Pandas 清洗错误数据

import pandas as pd

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.drop(x, inplace = True)

print(df.to_string())

Pandas 清洗重复数据

如果我们要清洗重复数据,可以使用 duplicated() 和 drop_duplicates() 方法。

  • 如果对应的数据是重复的,duplicated() 会返回 True,否则返回 False
  • 删除重复数据,可以直接使用drop_duplicates() 方法。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值