以下所有读取或写入的数据统一以 Pandas 下的 DataFrame 类来承载。需要注意的是,使用 Pandas 模块读取.csv文件,为了防止因为读取路径包含中文字符而报错,需要注明使用 Python 作为加载引擎。
import os import pandas as pd import json # 路径 __file__ #运行文件路径 os.listdir(path) #列示文件夹下所有文件名 os.path.exists(path) #判断路径指向目标是否存在 os.path.isdir(path) #判断路径是否指向文件夹 os.path.isfile(path) #判断路径是否指向文件 os.path.dirname() #截取上一级文件夹路径 os.mkdir(path) #新建文件夹 os.rmdir(path) #删除文件夹 # .txt/.csv df = pd.read_csv(path, sep=',', engine='python') #读取 df.to_csv(path, sep=',', index=None) #写入 # .xls/.xlsx df = pd.read_excel(path) #读取 df.to_excel(path, index=None) #写入 # .json d = json.load(open(path,encoding='utf-8')) #读取 json.dump(d,open(path,'w',encoding='utf-8')) #写入
12345678910111213141516171819202122232425数据清洗用于纠正数据错误,包含格式检查、空值填补和异常值剔除等。数据的载体决定了数据清洗的效率。以下是数据处理中主要使用的类及其对比:
类 list array Series DataFrame 模块 - Numpy Pandas Pandas 最高嵌套维度 无限 无限 一维 二维 优点 系统内置类,调用简单,运行速度快;对维度一致性没有严格要求 擅长处理多维矩阵;可迅速生成特殊矩阵;数学/统计学运算可用于其他多个类型的变量 - 内置高效的数据清洗函数 缺点 针对数值的数学/统计学操作必须通过遍历每一项进行,代码效率低 维度一致性要求严格;没有高效的数据清洗函数 - 仅限二维;数学/统计学运算仅能用于 DataFrame 类的变量 用途 用于处理引用关系和简单数据 用于多维数据的处理以及数学运算 与 DataFrame 搭配使用 用于数据清洗、统计学运算和数据存储导入所需模块,及本章示范所用的变量:
import numpy as np import pandas as pd string = 'This is an example.' vector = [1,2,3,4,5,6] vector2 = [5,2,1,4,3,6] matrix = [[1,2,3],[4,5,6]] cube = [[[1,2],[3,4],[5,6]],[[7,8],[9,10],[11,12]]] l = list(vector) arr = np.array(matrix) arr2 = np.array(cube) arr3 = np.array(vector) arr4 = np.array(vector2) arr5 = np.array([[[[2],[3]],[[4],[5]]]]) s = pd.Series(['Tom', 'John', 'Alber@t', np.nan, '1234','SteveSmith']) s1 = pd.Series([1,5,2,3,6,7]) s2 = pd.Series([9,7,3,1,6,3]) df = pd.DataFrame(matrix) df2 = pd.DataFrame(np.random.random((5,3)), index=['a','c','e','f','h'], columns=['one','two','three']) df3 = df2.reindex(index=['a','b'],columns=['one','two','five']) df4 = pd.DataFrame({ 'Team':['Liverpool','Liverpool','Chelsea','Chelsea','Barcelona','Barcelona','Barcelona','Barcelona','Liverpool','Man U','Man U','Liverpool'],'Rank': [1,2,2,3,3,4,1,1,2,4,1,2],'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],'Points': [876,789,863,673,741,812,756,788,694,701,804,690]}) bins = [500,600,700,800,900] labels = ['500-599','600-699','700-799','800-899'] df_one = pd.DataFrame({ 'id':[1,2,3,4], 'Name': ['Li', 'Yi', 'Qu', 'Mi'], 'subject_id':['DM','ML','DB','Prog.']}) df_two = pd.DataFrame({ 'id':[1,2,3,4], 'Name': ['Amy', 'Biky', 'Charles', 'Dave'], 'subject_id':['AI','ML','DB','NN']}) df_three = pd.DataFrame({ 'id2':[1,2,3,4], 'Name2': ['Amy', 'Biky', 'Charles', 'Dave'], 'subject_id2':['AI','ML','DB','NN']})
1234567891011121314151617181920212223242526272829除了 Pandas 模块下的 Series 类对数据类型格式要求较为严格,其他的类都可以通过间接的方式实现相互转换。例如,将 DataFrame 格式的数据转换为 list,可以先将其转换为 Numpy 模块下的 array 格式,然后调用 Numpy 的 tolist() 公式。以下是两种常用的无差别转换:
l = arr.tolist() #np.array转换为list arr = df.values #pd.DataFrame转换为np.array 12 1) 基本代码
以下列示不同种类的变量常用操作。
Built-In:str 类string.find('is',4) #寻找字符串 string.index('is',4) #寻找字符串 string.count('a') #出现频率 string.replace(‘a’, 'A') #替换字符 string.startswith('This') #是否以该字符串开始 string.endswith() #是否以该字符串结尾 string.split(' ') #分割字符串 '-'.join(string) #插入字符 string.strip() #消除两边空格 string.lstrip() #消除左边空格 string.rstrip() #消除右边空格 string.capitalize() #首字母大写 string.casefold() #首字母小写 string.lower() #全部小写 string.upper() #全部大写 string.title() #全部首字母大写 string.islower() #是否全部小写 string.isupper() #是否全部大写 string.istitle() #是否全部首字母大写
12345678910111213141516171819 Built-In:list 类# 全局信息: len(l) #长度 sorted(l) #从小到大排序 list(set(l)) #值集 # 操作: l.append(7) #在最后一项插入数字7 l.insert(2, 2.5) #在2处插入2.5 l.pop() #删除并返回最后一项 del l[-1] #删除最后一项 l.sort(reverse=False) #将数据按从小到大排列 l.reverse() #将列反向排列 list(map(float,l)) #将所有元素转为浮点形式 12345678910111213 Numpy:NDArray 类
# 全局信息: arr.shape #行列比 arr.dtype #数值类型 arr.T #行列转置 arr2.transpose(0,2,1) #第2维和第3维互换 arr.reshape([1,4]) #行列比调整为(1,4) arr5.squeeze() #剔除所有长度为1的维度 arr5.reshape(-1) #剔除所有长度为1的维度并扁平化 arr5.ravel() #剔除所有长度为1的维度并扁平化 arr5.flatten() #剔除所有长度为1的维度并扁平化 arr.astype(np.int8) #数值类型改为np.int8 np.argsort(arr, axis=1) #每一行从小到大排序的索引 np.unique(arr) #值集 np.where(arr>1) #满足条件的值在每一维的位置 # 生成特殊矩阵: np.arange(15) #生成0到14的向量 np.zeros((2,3)) #生成行列比(2,3)、值都为0的矩阵 np.ones((2,3)) #生成行列比(2,3)、值都为1矩阵 np.full((2,3),7) #生成行列比(2,3)、值都为7的矩阵 np.eye(5) #生成行列比(5,5)、对角线上值都为1的对角矩阵 np.random.random((2,3)) #生成行列比(2,3)的均匀随机数矩阵 np.random.randn(2,3) #生成行列比(2,3)的高斯随机数矩阵 np.random.seed(12) #使每次生成的随机数固定,随机代号为12 # 数学运算: np.max(arr) #最大值 np.min(arr) #最小值 np.abs(arr) #绝对值 np.floor(arr) #向下取整 np.ceil(arr) #向上取整 np.percentile(arr,95) #百分位数 np.sqrt(9) #算术平方根 np.log(2.7) #自然对数 np.exp(3) #自然常数 np.dot(arr3,arr4) #矩阵相乘 np.matmul(arr3,arr4) #矩阵相乘 arr3*arr4 #矩阵点对点相乘 # 统计学运算: np.sum(arr) #总和 np.prod(arr) #累乘 np.cumsum(arr) #累和 np.mean(arr) #均值 np.median(arr) #中位数 np.var(arr) #方差 np.std(arr) #标准差 np.corrcoef(arr) #相关系数 np.argmax(arr,axis=1) #最大值位置 np.bincount(arr[0]) #出现频率(仅整数) # 跨数据操作: np.concatenate((arr3,arr4), axis=0) #合并 np.vstack((arr3,arr4)) #纵向合并 np.hstack((arr3,arr4)) #横向合并 np.tile(arr, (2,3)) #2*3个矩阵合并
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 Pandas:Series 类单独调用 DataFrame 的任何一列即为 Series,可调用 DataFrame 的任何公式。
# 全局信息:(仅当数值类型为str时可用) s.str.len() #每一项的长度 s.str.lower() #每一个字母调整为小写 s.str.upper() #每一个字母调整为大写 s.str.split('|') #每一项按|进行切割 s.str.contains('as') #每一项是否包含as的True/False矩阵 s.str.replace('@', '$') #以$替代@ s.str.startswith ('T') #每一项是否以T开始的True/False矩阵 s.str.endswith('t') #每一项是否以t结尾True/False矩阵 s.str.find('e') #每一项第一个e的位置 # 统计学运算: s1.cov(s2) #两组数据的协方差 s1.corr(s2) #两组数据的相关系数 # 数据处理: pd.get_dummies(s) #生成Dummy列表 s.value_counts() #值集与数量 s.apply(lambda x: np.float(x)) #单元操作
12345678910111213141516171819 Pandas:DataFrame 类# 全局信息: df.copy() #深赋值 df.shape #行列比 df.index #行序号 df.columns #所有列的名称 df.head(2) #头两行 df.tail(1) #尾一行 df.unique() #值集 df.nunique() #值集大小 df.isin([1,2,3]) #条件匹配 df2.sort_values(by=['0'], kind='mergesort') #按名为0的列排序的结果 df2.loc['a','one'] #行名称等于a、列名称等于one的数值 df2.iloc[0,0] #第0行、第0列的数值 df2.reindex(index=['a','b'], columns=['one','five']) #保留选中的行和列 df2.set_index('two') #将列设为行序列 df2.reset_index(drop=True) #重置行序列为0开始的整数数列(不加入原列序号) df2.rename(columns={ 'one':'two','two':'four'}) #重置列名称 # 统计学运算: df.describe() #计数、均数、标准差、最小值、四分位数、最大值 df.sum() #求和 df.mean() #均值 df.median() #中位数 df.mode() #众数 df.var() #方差 df.std()
1234567891011121314151617181920212223242526相关知识
数据挖掘在高尔夫球场虫害预测的应用
全国首个花木数据要素综合服务平台发布
全国花木数据要素综合服务平台发布
数据挖掘技术在音乐流行趋势预测中的应用研究
关联规则挖掘在网上书店系统中的应用
全国首个花木数据要素综合服务平台落地北京丰台
基于电子病历的作物病虫害关联挖掘及智能诊断
分享:第十届“泰迪杯”数据挖掘挑战赛优秀作品
基于GIS与空间关联规则数据挖掘在森林病虫害预测中的应用初探
植物病虫害综合防治
网址: 数据挖掘综合 https://m.huajiangbk.com/newsview545936.html
上一篇: k均值聚类分析鸢尾花数据集 |
下一篇: 中国银行2018年数据对比 先说 |