本文需要的配套csv,json文件去我的主页资源库下载
pandas库学习配套资源-数据挖掘文档类资源-CSDN文库
目录
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 | 删除某几列的缺失值,可选,默认为所有列 |
how | any 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 --