pandas系统学习(二)数据处理

本文需要的配套csv,json文件去我的主页资源库下载

pandas库学习配套资源-数据挖掘文档类资源-CSDN文库

目录

1 经典数据文件格式

1.1 CSV 格式文件

1.1.1 读入CSV文件

1.1.2 查看文件信息

1.1.3 读取文件内容

1.1.4 文件转换(csv与DataFrame)

2.1 JSON格式文件

2.1.1 读入JSON文件

2 数据处理

2.1 重复值

2.1.1 检测重复值

2.1.2 删除重复值

2.2 缺失值

2.2.1 检测缺失值

2.2.2 处理缺失值


1 经典数据文件格式

1.1 CSV 格式文件

什么是CSV文件?CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

1.1.1 读入CSV文件

采用pandas.read_csv()函数

原型是

pandas.read_csv(filename)

参数说明

filename 文件名

例1 读入并输出csv文件

import pandas as pd
csv=pd.read_csv('test.csv')
print(csv)

输出

Name Team ... College Salary

0 Avery Bradley Boston Celtics ... Texas 7730337.0

1 Jae Crowder Boston Celtics ... Marquette 6796117.0

2 John Holland Boston Celtics ... Boston University NaN

3 R.J. Hunter Boston Celtics ... Georgia State 1148640.0

4 Jonas Jerebko Boston Celtics ... NaN 5000000.0

.. ... ... ... ... ...

453 Shelvin Mack Utah Jazz ... Butler 2433333.0

454 Raul Neto Utah Jazz ... NaN 900000.0

455 Tibor Pleiss Utah Jazz ... NaN 2900000.0

456 Jeff Withey Utah Jazz ... Kansas 947276.0

457 NaN NaN ... NaN NaN

可见直接输出csv 结果只能输出前五行和后五行的部分信息,信息不全

想要完整输出需要采用to_string ()函数,to_string()函数能够返回DataFrame类型的数据

例2 完整输出csv文件

import pandas as pd
csv=pd.read_csv('test.csv')
print(csv.to_string())

输出 自己尝试

1.1.2 查看文件信息

采用info()返回文件的一些基本信息,如行数,编号,列数,各列的数据类型

例3 输出信息

import pandas as pd
csv=pd.read_csv('test.csv')
print(csv.info())

输出

0到457共458行

九列,并且可以看到每列的数据类型

RangeIndex: 458 entries, 0 to 457
Data columns (total 9 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   Name      457 non-null    object 
 1   Team      457 non-null    object 
 2   Number    457 non-null    float64
 3   Position  457 non-null    object 
 4   Age       457 non-null    float64
 5   Height    457 non-null    object 
 6   Weight    457 non-null    float64
 7   College   373 non-null    object 
 8   Salary    446 non-null    float64
dtypes: float64(4), object(5)
memory usage: 32.3+ KB
None

1.1.3 读取文件内容

采用head(n)函数读取前n行,默认为5行

采用tail(n) 函数读取末尾n行,默认为5行

例4 输出文件前三行和后三行

import pandas as pd
csv=pd.read_csv('test.csv')
print(csv.head(3))
print(csv.tail(3))
​

1.1.4 文件转换(csv与DataFrame)

在1.1.1 中我们使用了to_string()函数使csv变为了DataFrame,那么我们该怎么把DataF变为csv呢?

采用to_csv()方法

例5 把pands系统学习(一)中的2.2.1 中的示例转换为csv文件

import pandas as pd
data=[["Qodi",95,100],["Jack",100,101],["Lihua",90,102]]
df=pd.DataFrame(data,index=[1,2,3],columns=["name","socre","id"])
df.to_csv('last.csv')

打开

1.2 JSON格式文件

JSON(JavaScript Object Notation,JavaScript 对象表示法),是存储和交换文本信息的语法,类似 XML。

[ { "id": "100", "name": "Qodi", "score": "95", },

{ "id": "101", "name": "Jack", "score": "100", },

{ "id": "102", "name": "Lihua", "score": "90",

} ]

2.1.1 读入JSON文件

import pandas as pd
df = pd.read_json('student.json')
print(df.to_string())

输出

0  100   Qodi     95
1  101   Jack    100
2  102  Lihua     90

类似csv 用to_string 函数转换为DataFrame

1.3 Pandas转换为Numpy数组

Pandas 提供了 values 属性,可以将 DataFrame 或 Series 转换为 Numpy 数组。示例代码如下:

import pandas as pd
import numpy as np

# 创建一个 DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
})

# 将 DataFrame 转换为 Numpy 数组
arr1 = df.values

# 创建一个 Series
s = pd.Series([1, 2, 3, 4, 5])

# 将 Series 转换为 Numpy 数组
arr2 = s.values

在以上代码中

df.values 将 DataFrame df 转换为了一个 Numpy 数组 arr1

s.values 将 Series 转换为了一个 Numpy 数组 arr2

需要注意的是,转换后的 Numpy 数组将不再保留原有的索引和列名信息。

或者可以用to_numpy()函数

# 创建一个 DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
})

# 将 DataFrame 转换为 Numpy 数组
arr = df.to_numpy()

2 数据处理

数据处理主要是对一些不规则数据进行处理

具体有

  • 重复值 应对:1删除

  • 缺失值 应对:1删除,2填充(均值,众数,中位数,前后相邻值)3 (拉格朗日插值,牛顿插值)

  • 异常值 应对:1 删除看做缺失值

2.1 重复值

2.1.1 检测重复值

例1 检测我们的文件中是否有重复值

import pandas as pd
df = pd.read_csv('property-data.csv')
print(df.duplicated().value_counts)

输出如下 此时有重复的行数会显示ture,没有重复的就是False

<bound method IndexOpsMixin.value_counts of

0     False
1     False
2     False
3     False
4     False
5     False
6     False
7     False
8     False
9      True
10     True
dtype: bool>

注意到最后两行和前面重复。

2.1.2 删除重复值

利用drop_duplicates函数

函数原型为

drop_duplicates(subset,keep,inplace)

参数说明

subset: 以哪几列作为基准列,判断是否重复,如果不写则默认所有列都要重复才算

keep: 保留哪一个,fist-保留首次出现的,last-保留最后出现的,

False-重复的一个都不保留,默认为first

inplace: 是否进行替换,False的就会保留,Ture的话就会删除,默认为False

例2 删除文件中的重复值,并输出检测

import pandas as pd
df = pd.read_csv('property-data.csv')
df.drop_duplicates(inplace=True)
print(df.duplicated().value_counts)

输出

<bound method IndexOpsMixin.value_counts of

0 False

1 False

2 False

3 False

4 False

5 False

6 False

7 False

8 False

dtype: bool>

此时发现,后两行已经被删除

2.2 缺失值

2.2.1 检测缺失值

先通过isnull()函数来看是否有缺失值

每一个位置都会输出ture 和false ture代表有缺失

2.2.2 处理缺失值

注意这里我们是对确实值的处理,有两种方式,删除和填充

(1)删除缺失值

利用dropna()方法

原型

dropna(axis,subset,how,thresh,inplace)

参数

参数说明
axis删除行还是列,行是0或index,列是1或column,默认是行
subst删除某几列的缺失值,可选,默认为所有列
howany or all,any表明只要出现1个就删除,all表示所有列均为na才删
thresh缺失值的数量标准,达到这个阈值才会删除
inplace是否替换

例3 删除有缺失值的行

import pandas as pd
df = pd.read_csv('property-data.csv')
df.dropna(how='any',axis=0,inplace=True)
print(df.isnull())

输出

这时候发现所有行都是False了


0   False   False    False         False         False     False  False
1   False   False    False         False         False     False  False
8   False   False    False         False         False     False  False
10  False   False    False         False         False     False  False

(2)填充缺失值

原型 fillna(value,method,{},limit,inplace,axis)

参数说明

参数说明
value指定替代值,可以传入一个字符串或数字代替Na,
method有ffill(用前一个填充)和bfill(用后一个填充)两种
{}可以根据不同的列填充不同的值,列为键,填充值为值
limit限定填充的数量
inplace是否直接在原文件修改
axis填充的方向,默认是0,按行填充

例4 用0来填充空值

import pandas as pd
df = pd.read_csv('property-data.csv')
df.fillna(0,inplace=True)
print(df)

输出

            PID  ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
0   100001000.0   104.0      PUTNAM            Y            3        1  1000
1   100002000.0   197.0   LEXINGTON            N            3      1.5    --
2   100003000.0     0.0   LEXINGTON            N            0        1   850
3   100004000.0   201.0    BERKELEY           12            1        0   700
4           0.0   203.0    BERKELEY            Y            3        2  1600
5   100006000.0   207.0    BERKELEY            Y            0        1   800
6   100007000.0     0.0  WASHINGTON            0            2   HURLEY   950
7   100008000.0   213.0     TREMONT            Y            1        1     0
8   100009000.0   215.0     TREMONT            Y           na        2  1800
9   100003000.0     0.0   LEXINGTON            N            0        1   850
10  100002000.0   197.0   LEXINGTON            N            3      1.5    --

例5 用中位数来填充空值

import pandas as pd
df = pd.read_csv('property-data.csv')
df.fillna(df.median(),inplace=True)
print(df)

输出

            PID  ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
0   100001000.0   104.0      PUTNAM            Y            3        1  1000
1   100002000.0   197.0   LEXINGTON            N            3      1.5    --
2   100003000.0   202.0   LEXINGTON            N          NaN        1   850
3   100004000.0   201.0    BERKELEY           12            1      NaN   700
4   100003500.0   203.0    BERKELEY            Y            3        2  1600
5   100006000.0   207.0    BERKELEY            Y          NaN        1   800
6   100007000.0   202.0  WASHINGTON          NaN            2   HURLEY   950
7   100008000.0   213.0     TREMONT            Y            1        1   NaN
8   100009000.0   215.0     TREMONT            Y           na        2  1800
9   100003000.0   202.0   LEXINGTON            N          NaN        1   850
10  100002000.0   197.0   LEXINGTON            N            3      1.5    --

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值