使用Python Pandas处理亿级数据_光环大数据Python培训
- 格式:pdf
- 大小:303.21 KB
- 文档页数:6
pythonpandas库用法Pandas是一个用于数据分析和处理的强大库,它在Python中广泛使用。
Pandas提供了一个易于使用的API,用于读取、清理、分析和可视化大型数据集。
本篇文章将详细介绍Pandas库的基本用法和常见操作。
一、安装Pandas库要使用Pandas库,首先需要在Python环境中安装该库。
可以通过pip命令在终端或命令提示符中安装Pandas库。
例如,在命令行中输入以下命令即可安装最新版本的Pandas库:```shellpipinstallpandas```二、Pandas库的基本用法1.导入Pandas库:在Python脚本或交互式环境中,需要导入Pandas库才能使用其功能。
可以使用以下语句导入Pandas库:```pythonimportpandasaspd```2.创建数据帧(DataFrame):Pandas库的核心是数据帧,它是一个二维标签化的数据结构,可以存储不同类型的数据。
可以使用DataFrame()函数创建数据帧,并指定数据类型和列名等参数。
例如:```pythondf=pd.DataFrame({'姓名':['张三','李四','王五'],'年龄':[25,30,35]})```这将创建一个包含姓名和年龄两列的数据帧。
3.数据帧的读取和写入:Pandas库提供了多种方法来读取和写入数据帧,包括从CSV文件、Excel文件、数据库等不同格式的数据源中读取数据。
可以使用read_csv()、read_excel()、read_sql()等方法读取数据,并使用to_csv()、to_excel()等方法将数据帧写入文件。
例如:```python#读取CSV文件df=pd.read_csv('data.csv')#将数据帧写入CSV文件df.to_csv('output.csv',index=False)```4.数据帧的筛选和操作:Pandas数据帧提供了丰富的筛选和操作功能,可以使用条件表达式筛选数据帧中的行和列,并进行各种数学运算、统计分析和可视化操作。
使用Python进行大数据分析和处理一、引言随着大数据时代的到来,数据分析和处理技术愈发重要。
Python作为一种简单易学、功能强大的编程语言,被广泛应用于数据科学领域。
本文将介绍如何使用Python进行大数据分析和处理,并分为以下几个部分:数据获取、数据清洗、数据分析、数据可视化和模型建立。
二、数据获取在进行大数据分析和处理之前,我们需要从各种数据源中获取数据。
Python提供了丰富的库和工具,可以轻松地从数据库、API、Web页面以及本地文件中获取数据。
比如,我们可以使用pandas库中的read_sql()函数从数据库中读取数据,使用requests库从API获取数据,使用beautifulsoup库从Web页面获取数据,使用csv库从本地CSV文件中获取数据。
三、数据清洗获取到原始数据之后,通常需要进行数据清洗。
数据清洗是指对数据进行预处理,包括处理缺失值、处理异常值、处理重复值、数据格式转换等。
Python提供了丰富的库和函数来帮助我们进行数据清洗,如pandas库中的dropna()函数用于处理缺失值,使用numpy库中的where()函数用于处理异常值,使用pandas库中的duplicated()函数用于处理重复值。
四、数据分析数据分析是大数据处理的核心环节之一。
Python提供了强大的库和工具来进行数据分析,如pandas库和numpy库。
使用这些库,我们可以进行数据聚合、数据筛选、数据排序、数据计算等。
例如,我们可以使用pandas库中的groupby()函数进行数据聚合,使用pandas库中的query()函数进行数据筛选,使用pandas库中的sort_values()函数进行数据排序,使用numpy库中的mean()函数进行数据计算。
五、数据可视化数据可视化是将数据以图形化的方式展现出来,帮助我们更好地理解数据的分布和趋势。
Python提供了多种库和工具来进行数据可视化,如matplotlib库和seaborn库。
python pd库用法pandas(简称pd)是一个强大的数据分析和处理库,它为Python提供了许多用于数据操作和分析的工具。
下面我将从多个角度来介绍pandas库的用法。
1. 数据结构:pandas主要有两种数据结构,Series和DataFrame。
Series是一维标记数组,类似于Python中的列表,而DataFrame是二维的表格型数据结构,类似于Excel表格。
你可以使用pd.Series()和pd.DataFrame()来创建这两种数据结构。
2. 数据导入和导出:pandas可以轻松地从各种数据源导入数据,包括CSV文件、Excel文件、数据库等。
你可以使用pd.read_csv()、pd.read_excel()、pd.read_sql()等函数来导入数据,而使用to_csv()、to_excel()、to_sql()等函数来导出数据。
3. 数据操作:pandas提供了丰富的数据操作功能,包括数据的选取、过滤、排序、合并、拆分等。
你可以使用类似于SQL的语法来进行数据的筛选和操作,比如使用loc[]和iloc[]来进行数据的选取和切片,使用merge()和concat()来进行数据的合并和拼接。
4. 数据分析:pandas提供了许多用于数据分析的函数,包括描述性统计、数据聚合、透视表等。
你可以使用mean()、sum()、groupby()等函数来进行数据的统计和分析,也可以使用pivot_table()来创建透视表进行数据分析。
5. 数据可视化:pandas结合了Matplotlib库,可以轻松地进行数据可视化。
你可以使用plot()函数来绘制折线图、柱状图、散点图等各种图表,也可以使用seaborn库来进行更加复杂的数据可视化。
总之,pandas库是Python数据分析领域中不可或缺的重要工具,它提供了丰富的功能和灵活的操作方式,能够帮助你高效地处理和分析各种类型的数据。
pandas库用法Pandas库是一个数据分析工具包,提供了快速、灵活和富有表现力的数据结构用于处理和分析数据。
它是Python编程语言的一个开源库,因其广泛使用和良好的文档而受到欢迎。
本文将详细介绍Pandas库的用法,以及如何使用它来处理和分析数据。
一、安装Pandas库在使用Pandas库之前,您需要先通过以下命令在Python中安装这个库:```python !pip install pandas ```请注意,`!`符号是为了在Jupyter Notebook中安装库而不是在Python本身中安装库。
如果您不使用Jupyter Notebook,则不需要使用此符号。
二、创建Pandas DataFramePandas库最重要的数据结构是DataFrame和Series。
DataFrame是二维表格数据结构,其中每个列可以是不同的数据类型(例如数字、字符串和布尔值)。
Series是一维标记数组,可以保存任何数据类型的数据,并且有一个与之相关联的标签或索引。
要创建一个Pandas DataFrame,您可以使用以下Python代码:```python import pandas as pddata = {'country': ['China', 'USA', 'Japan','Germany'], 'population': [1439, 331, 126, 83], 'GDP': [14.34, 21.44, 4.97, 3.95], 'area': [9597, 9834, 377, 357]} df =pd.DataFrame(data) print(df) ```上述代码将创建一个名为“data”的字典,其中包含四个键和值对。
通过传递此字典来创建数据框。
“country”列包含四个国家的名称,而“population”列包含它们的人口。
pythonpandas库用法Pandas是一个强大的数据分析工具,提供了灵活高效的数据结构和数据分析功能。
以下是Pandas库的用法的详细介绍。
一、Pandas的基本概念1. 数据结构:Pandas提供了两种主要的数据结构:Series和DataFrame。
Series是一维数组,可保存任何数据类型;DataFrame是二维表格数据结构,可保存多种类型的列。
这两种数据结构非常类似于Numpy的ndarray。
2. 索引:Pandas的数据结构都有一个索引,它提供了对数据的快速访问。
索引可以是整数、字符串或任何自定义数据类型的值。
Series的索引由默认生成,DataFrame的索引通常是由行名称和列名称组成。
4. 缺失数据处理:Pandas提供了方法处理缺失数据,如删除或填充缺失值。
可以使用isnull(和notnull(方法来检查数据是否为缺失值。
二、Series的用法1. 创建Series:可以将列表、字典或Numpy数组传递给Series(函数来创建Series对象。
可以指定索引,也可以使用默认索引。
2. 访问数据:可以使用索引或位置访问Series对象中的数据,也可以使用切片选择多个元素。
还可以使用布尔索引根据条件选择数据。
3. Series的运算:可以对Series对象进行算术运算、元素级运算、使用numpy函数或apply(方法应用自定义函数。
4. 数据对齐:在多个Series对象之间进行运算时,Pandas会自动根据索引对齐数据。
三、DataFrame的用法3. DataFrame的操作:可以对DataFrame对象进行转置、重命名列、添加新列或删除列。
还可以对行或列进行排序。
4. DataFrame的运算:可以对DataFrame对象进行算术运算、元素级运算、使用numpy函数或apply(方法应用自定义函数。
还可以对多个DataFrame对象进行合并或连接。
四、数据清洗和预处理1. 处理缺失数据:可以使用dropna(方法删除包含缺失值的行或列,也可以使用fillna(方法填充缺失值。
pandas的数据处理基本功能Pandas是Python中一个非常强大的数据处理库,提供了许多数据处理的工具和功能。
以下是Pandas的一些基本功能:
1. 数据导入和导出:Pandas提供了读取和写入各种数据格式的功能,如CSV、Excel、SQL等。
2. 数据清洗:Pandas提供了许多数据清洗工具,如处理缺失值、重复值、异常值等。
3. 数据转换:Pandas提供了许多数据转换的工具,如数据类型转换、数据排序、数据分组等。
4. 数据聚合:Pandas提供了许多数据聚合的工具,如求和、求平均值、求最大值、最小值等。
5. 数据连接:Pandas提供了数据连接的功能,可以将多个数据集连接在一起。
6. 时间序列处理:Pandas对时间序列数据的处理提供了强大的支持,可以轻松地创建、切片和转换时间序列数据。
7. 可视化:虽然Pandas本身不提供可视化功能,但它可以和matplotlib等可视化库一起使用,将数据处理的结果可视化。
8. 高效性能:Pandas使用了C语言进行优化,因此其性能相对较高,可以处理大规模的数据集。
总的来说,Pandas是一个非常强大的数据处理库,提供了许多功能来帮助用户处理和分析数据。
从入门到精通pandas操作Pandas简介:Python Data Analysis Library(数据分析处理库)或pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
pandas的数据结构:Series:一维数组,与Numpy中的一维ndarray类似。
二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
Time- Series:以时间为索引的Series。
DataFrame:二维的表格型数据结构,可以理解为Series的容器。
Panel :三维的数组,可以理解为DataFrame的容器。
本文主要介绍DateFrame数据结构。
本文中用到的数据集为food_info.csv,若有需要,在留言区留言即可获得。
本文只是介绍pandas的基本使用,若要详细深入学习,请参阅pandas官方文档。
1.读取.csv格式的数据文件food_info.csv文件的局部预览图:每一行:代表一种食品所包含的各种营养成分#导包import pandas#读取数据文件,并将数据赋值成一个变量..food_info = pandas.read_csv("food_info.csv")#将数据赋值成一个变量后,打印此变量的类型为Dataframe ..print(type(food_info))#打印文件中数据的类型。
object类型即string类型print(food_info.dtypes)#若对pandas中的某函数不了解,可以通过help()来查看..print(help(pandas.read_csv)).运行结果:补充:DataFrame结构中的dtype类型object————for string valuesint————for integer valuesfloat————for float values datetime————for time valuesbool————for Boolean values2. DataFrame类型的变量拥有的操作在第一步中,将要处理的数据文件读取出来并赋值给一个变量food_info,此变量的类型为DataFrame类型,下边将会对这个变量进行操作。
Python与大数据处理使用PySpark和Pandas进行大规模数据处理随着数字化时代的发展,数据量的爆炸式增长让传统的数据处理方式变得如鸡肋。
为了更好地应对大规模数据的处理需求,Python提供了两个强大的工具,即PySpark和Pandas。
本文将介绍如何使用PySpark和Pandas来处理大规模数据,包括数据的读取、清洗、转换、计算和存储等方面。
一、PySpark简介PySpark是Spark的Python API,是一个基于内存的集群计算系统。
相比传统的数据处理工具,PySpark具有以下优势:1. 分布式计算:PySpark能够并行处理大规模数据,并且可以利用多台机器的计算资源,提高数据处理的效率。
2. 内存计算:PySpark将数据加载到内存中进行计算,大大减少了磁盘IO的开销,提高了数据处理的速度。
3. 弹性扩展:PySpark可以根据数据量的增长,动态地扩展集群的计算资源,以应对不同规模的数据处理需求。
二、Pandas简介Pandas是Python中用于数据处理和分析的开源库。
相比PySpark,Pandas更适合处理中小规模的数据,具有以下特点:1. 快速高效:Pandas使用NumPy来存储和处理数据,可以对数据进行快速的向量计算和操作。
2. 数据清洗:Pandas提供了丰富的数据清洗和转换功能,可以处理缺失值、重复值等常见的数据问题。
3. 数据可视化:Pandas结合Matplotlib和Seaborn等库,可以方便地对数据进行可视化展示,便于数据分析和探索。
三、数据读取与存储在大规模数据处理中,数据的读取和存储是非常重要的一环。
PySpark和Pandas都支持各种数据源的读取和存储操作。
1. 数据读取:PySpark可以从HDFS、数据库、本地文件等数据源读取数据。
通过SparkSession的read方法,可以方便地加载不同格式的数据,如CSV、JSON、Parquet等。
学习Python实现数据处理与分析Python是一种开源的编程语言,具备简洁、高效的特点,并且在数据处理与分析领域有着广泛的应用。
本文将从数据清洗、数据分析和数据可视化三个方面,介绍如何使用Python进行数据处理与分析。
一、数据清洗数据清洗是数据处理的第一步,也是非常重要的一步。
下面介绍几个常用的数据清洗方法。
1. 去除重复值在处理大量数据时,常常会遇到重复的数据。
可以使用Python 的pandas库中的drop_duplicates()函数去除重复值。
例如,我们可以使用以下代码去除data中的重复值:data = data.drop_duplicates()2. 缺失值处理在数据中,经常会遇到缺失值的情况。
可以使用Python的pandas库中的fillna()函数对缺失值进行处理。
例如,我们可以使用以下代码将data中的所有缺失值替换为0:data = data.fillna(0)3. 数据类型转换数据在导入时,可能会出现数据类型不一致的情况,影响后续的数据分析。
可以使用Python的pandas库中的astype()函数将数据类型进行转换。
例如,我们可以使用以下代码将data中的数据转换为整数类型:data = data.astype(int)二、数据分析Python具备强大的数据分析能力,下面介绍几个常用的数据分析方法。
1. 描述性统计描述性统计是对数据进行初步分析的一种方法,可以使用Python的pandas库中的describe()函数来得到数据的基本统计量,如均值、中位数、标准差等。
例如,我们可以使用以下代码计算data的描述性统计量:data.describe()2. 相关性分析相关性分析用来研究两个变量之间的相关关系,可以使用Python的pandas库中的corr()函数来计算变量之间的相关系数。
例如,我们可以使用以下代码计算data中各个变量之间的相关系数:data.corr()3. 数据建模数据建模是数据分析的重要环节,可以使用Python的scikit-learn库进行数据建模。
使用Spyder进行Python的科学计算和数据分析Spyder是一个基于Python的强大的集成开发环境(IDE),广泛用于科学计算和数据分析。
本文将介绍如何使用Spyder进行Python的科学计算和数据分析,并按以下几个章节进行具体内容的阐述:安装Spyder、Spyder界面介绍、Python科学计算库的使用、数据分析的基础操作和高级技巧。
## 第一章安装Spyder在使用Spyder之前,首先需要安装Anaconda,这是一个Python的科学计算包管理器。
通过Anaconda,我们可以很方便地安装和管理Python科学计算所需的各种库。
在Anaconda官网上下载对应操作系统的安装包,并按照提示完成安装。
## 第二章 Spyder界面介绍安装完成后,打开Anaconda Navigator,点击启动Spyder。
Spyder的界面分为四个主要区域:编辑器、变量资源管理器、IPython控制台和文件浏览器。
编辑器可以编写和运行Python脚本,变量资源管理器可以查看当前运行环境中的变量,IPython控制台可以交互地执行Python代码,文件浏览器则可以管理项目文件。
## 第三章 Python科学计算库的使用Python拥有丰富的科学计算库,其中最为常用的包括NumPy、SciPy和matplotlib。
NumPy提供了高性能的多维数组操作功能,SciPy则提供了科学计算中常用的数值计算和优化算法,matplotlib 则是用于绘图和数据可视化的库。
在Spyder中,我们可以直接导入这些库并使用其提供的函数和类。
例如,通过导入NumPy库,我们可以使用其提供的ndarray 对象来进行数组运算和操作;通过导入matplotlib库,我们可以使用其提供的绘图函数来可视化数据。
## 第四章数据分析的基础操作数据分析是通过对大量数据的收集、处理和分析,以提取有价值信息和进行决策支持的过程。
在Spyder中,我们可以使用Pandas库来进行数据分析。
Python数据分析与应⽤-使⽤pandas进⾏数据预处理使⽤pandas进⾏数据预处理1清洗数据⽬录合并数据2标准化数据3转换数据4⼩结5横向堆叠,即将两个表在X轴向拼接在⼀起,可以使⽤concat函数完成,concat函数的基本语法如下。
pandas.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None,verify_integrity=False, copy=True)常⽤参数如下所⽰。
1. 横向表堆叠参数名称说明objs接收多个Series,DataFrame,Panel的组合。
表⽰参与链接的pandas对象的列表的组合。
⽆默认。
axis接收0或1。
表⽰连接的轴向,默认为0。
join 接收inner或outer。
表⽰其他轴向上的索引是按交集(inner)还是并集(outer)进⾏合并。
默认为outer。
join_axes接收Index对象。
表⽰⽤于其他n-1条轴的索引,不执⾏并集/交集运算。
参数名称说明ignore_index 接收boolean。
表⽰是否不保留连接轴上的索引,产⽣⼀组新索引range(total_length)。
默认为False。
keys接收sequence。
表⽰与连接对象有关的值,⽤于形成连接轴向上的层次化索引。
默认为None。
levels 接收包含多个sequence的list。
表⽰在指定keys参数后,指定⽤作层次化索引各级别上的索引。
默认为None。
names接收list。
表⽰在设置了keys和levels参数后,⽤于创建分层级别的名称。
默认为None。
verify_integrity 接收boolearn。
表⽰是否检查结果对象新轴上的重复情况,如果发现则引发异常。
默认为False 。
1. 横向表堆叠续上表当axis=1的时候,concat做⾏对齐,然后将不同列名称的两张或多张表合并。
如何使用Python进行大数据处理和分析Python作为一种功能强大且易于使用的编程语言,已成为处理与分析大数据的首选工具之一。
无论是处理结构化数据还是非结构化数据,Python提供了众多优秀的库和工具,可以帮助用户高效地进行大数据处理与分析。
本文将介绍如何利用Python来进行大数据处理和分析,以帮助读者更好地利用Python处理庞杂的数据集。
一、了解Python的大数据处理与分析库在开始使用Python处理和分析大数据之前,需要了解并掌握一些重要的库和工具。
以下是几个常用的Python库:1. NumPy:NumPy是Python中用于处理数值数据的基础库,提供了多维数组对象和一系列高效的函数,适用于大规模数据的快速运算。
2. Pandas:Pandas是一个用于数据操作和分析的强大库,提供了灵活且高效的数据结构,如DataFrame和Series,可用于处理统计分析、数据清洗和数据可视化。
3. Matplotlib:Matplotlib是一个用于绘制图表和可视化数据的库,支持多种图表类型,如折线图、散点图和直方图,可用于展示处理和分析结果。
4. Scikit-learn:Scikit-learn是一个机器学习库,提供了各种机器学习算法和工具,可用于数据挖掘和预测分析。
5. PySpark:PySpark是Python与Apache Spark集成的库,使用Spark的分布式计算框架,可实现对大规模数据的并行处理和分析。
二、数据处理基础:NumPy和Pandas的应用在使用Python处理大数据之前,需要学习NumPy和Pandas的基础知识。
NumPy提供了多维数组对象(ndarray),可以进行高效的数值计算。
Pandas提供了DataFrame和Series对象,可以方便地进行表格型数据的操作和分析。
1. 数据导入与导出:使用Pandas可以轻松导入和导出多种数据格式,如CSV、Excel、SQL等。
pandas_datareader用法pandas_datareader是一个用于从各种数据源(例如Yahoo Finance、Google Finance、World Bank等)获取金融和经济数据的Python库。
它的功能与pandas库的DataFrame对象紧密集成,使用户可以轻松地从这些数据源中读取数据并进行分析和可视化。
以下是pandas_datareader的基本用法:1.导入必要的库:```pythonimport pandas as pdimport pandas_datareader as pdr```2.使用pandas_datareader函数来获取数据:```pythondata = pdr.get_data_yahoo('AAPL', start='2020-01-01', end='2020-12-31')```此示例从Yahoo Finance获取了苹果公司(AAPL)的股票数据,日期范围从2020年1月1日到2020年12月31日。
3.获取数据后,可以使用pandas库的DataFrame对象执行各种操作。
例如,可以查看数据的前几行:```pythonprint(data.head())```除了获取股票数据外,pandas_datareader还可以用于获取各种其他金融和经济数据,如货币汇率、国债收益率、国际贸易数据等。
同时,pandas_datareader还提供了一些其他功能,例如:-获取特定国家/地区的国际贸易数据:```pythondata = pdr.wb.download(indicator='NE.EXP.GNFS.ZS', country='all', start=2005, end=2019)```此示例从世界银行获取了全球各国的出口占GDP比例数据。
-获取Google Trends数据:```pythondata = pdr.get_data_google('BTCUSD', start='2020-01-01', end='2020-12-31')```此示例获取了比特币在Google上的搜索趋势数据。
panda在python中的用法Pandas是Python中一个用于数据处理和分析的库,它提供了许多强大的功能,包括数据清洗、数据转换、数据聚合和可视化等。
以下是Pandas在Python中的一些基本用法:1. 导入Pandas库:```pythonimport pandas as pd```2. 读取数据:```pythondf = _csv('') 读取CSV文件df = _excel('') 读取Excel文件df = _sql_query('SELECT FROM table', connection) 从数据库中读取数据```3. 数据清洗:```pythondf = () 删除含有缺失值的行df = (value) 填充缺失值df = (old_value, new_value) 替换值```4. 数据转换:```pythondf = (columns={'old_name': 'new_name'}) 重命名列名df = (dtype) 转换数据类型df = (index, columns, values) 转置数据框```5. 数据聚合:```pythondf = (by='column_name').sum() 按列聚合求和df = (by='column_name').mean() 按列聚合求平均值```6. 数据可视化:```pythonimport as plt() 绘制图表() 显示图表```以上是Pandas在Python中的一些基本用法,通过这些用法,你可以轻松地处理和分析数据。
pandas空数据处理方法详解Pandas是一个强大的数据分析工具,但是在实际的数据处理中,我们经常会遇到空数据(缺失值)的情况。
空数据通常是由于数据采集过程中的错误或者其他原因导致的,对于这些空数据的处理,我们需要根据具体的情况采取不同的策略。
下面是一些常见的空数据处理方法。
1.删除空数据行/列:使用dropna(函数可以删除包含空数据的行或列。
其中,axis参数用于指定删除行还是列,how参数用于指定删除方式,可以选择"any"表示只要有一个空数据就删除,或者选择"all"表示全部为空数据才删除。
2.填充空数据:使用fillna(函数可以将空数据填充为指定的值。
可以使用常数值、均值、中位数、众数等来填充空数据。
通过传递不同的参数给fillna(函数,可以实现不同的填充方式。
3.插值填充空数据:使用interpolate(函数可以对空数据进行插值填充。
插值方法有很多种,如线性插值、多项式插值、样本内插值等。
通过设置不同的插值方法和其他参数,可以实现不同的填充效果。
4.用前后数据填充空数据:使用fillna(函数的方法参数可以通过指定"ffill"或"bfill"来使用前一个或后一个非空数据来填充空数据。
这种方法适用于时间序列数据,可以更好地利用数据的前后关系进行填充。
5.删除包含空数据的特定行/列:使用drop(函数可以删除包含空数据的特定行或列。
可以通过传递一些条件给drop(函数,实现对特定行或列的删除操作。
这种方法适用于在特定情况下需要删除一些含有空数据的行或列的情况。
6.使用模型预测填充空数据:如果数据中存在一些特定规律,可以使用机器学习模型来预测并填充空数据。
通过训练一个模型来预测空数据,然后将预测结果填充到原数据中。
7.处理空数据的其它策略:还有一些其他的处理空数据的策略,如自定义填充方法、根据规则填充、删除包含过多空数据的列等。
使用Python Pandas处理亿级数据_光环大数据Python培训
#玩转大数据#在数据分析领域,最热门的莫过于Python和R语言,此前有一篇文章《别老扯什么Hadoop了,你的数据根本不够大》指出:只有在超过5TB数据量的规模下,Hadoop才是一个合理的技术选择。
这次拿到近亿条日志数据,千万级数据已经是关系型数据库的查询分析瓶颈,之前使用过Hadoop对大量文本进行分类,这次决定采用Python来处理数据:
硬件环境
CPU:3.5 GHz Intel Core i7
内存:32 GB HDDR 3 1600 MHz
硬盘:3 TB Fusion Drive
数据分析工具
Python:2.7.6
Pandas:0.15.0
IPython notebook:2.0.0
源数据如下表所示:
Table Size Desc ServiceLogs 98,706,832 rows x 14 columns 8.77 GB 交易日志数据,每个交易会话可以有多条交易 ServiceCodes 286 rows × 8 columns 20 KB 交易分类的字典表
数据读取
启动IPython notebook,加载pylab环境:
ipython notebook --pylab=inline
Pandas提供了IO工具可以将大文件分块读取,测试了一下性能,完整加载
9800万条数据也只需要263秒左右,还是相当不错了。
import pandas as pdreader = pd.read_csv('data/servicelogs', iterator=True)try: df = reader.get_chunk(100000000)except StopIteration: print "Iteration is stopped."
1百万条 1千万条 1亿条 ServiceLogs 1 s 17 s 263 s
使用不同分块大小来读取再调用pandas.concat 连接DataFrame,chunkSize设置在1000万条左右速度优化比较明显。
loop = TruechunkSize = 100000chunks = []while loop: try: chunk = reader.get_chunk(chunkSize) chunks.append(chunk) except StopIteration: loop = False print "Iteration is stopped."df = pd.concat(chunks, ignore_index=True)
下面是统计数据,Read Time是数据读取时间,Total Time是读取和Pandas
进行concat操作的时间,根据数据总量来看,对5~50个DataFrame对象进行合
并,性能表现比较好。
Chunk Size Read Time (s) Total Time (s) Performance 100,000 224.418173
261.358521 200,000 232.076794 256.674154 1,000,000 213.128481
234.934142 √√ 2,000,000 208.410618 230.006299 √√√ 5,000,000
209.460829 230.939319 √√√ 10,000,000 207.082081 228.135672 √√
√√ 20,000,000 209.628596 230.775713 √√√ 50,000,000 222.910643
242.405967 100,000,000 263.574246 263.574246
如果使用Spark提供的Python Shell,同样编写Pandas加载数据,时间会短25秒左右,看来Spark对Python的内存使用都有优化。
数据清洗
Pandas提供了 DataFrame.describe 方法查看数据摘要,包括数据查看(默认共输出首尾60行数据)和行列统计。
由于源数据通常包含一些空值甚至空列,会影响数据分析的时间和效率,在预览了数据摘要后,需要对这些无效数据进行处理。
首先调用 DataFrame.isnull() 方法查看数据表中哪些为空值,与它相反的方法是 DataFrame.notnull() ,Pandas会将表中所有数据进行null计算,以True/False作为结果进行填充,如下图所示:
Pandas的非空计算速度很快,9800万数据也只需要28.7秒。
得到初步信息之后,可以对表中空列进行移除操作。
尝试了按列名依次计算获取非空列,和DataFrame.dropna() 两种方式,时间分别为367.0秒和345.3秒,但检查时发现 dropna() 之后所有的行都没有了,查了Pandas手册,原来不加参数的情况下, dropna() 会移除所有包含空值的行。
如果只想移除全部为空值的列,需要加上 axis 和 how 两个参数:
df.dropna(axis=1, how='all')
共移除了14列中的6列,时间也只消耗了85.9秒。
接下来是处理剩余行中的空值,经过测试,在 DataFrame.replace() 中使用空字符串,要比默认的空值NaN节省一些空间;但对整个CSV文件来说,空列只是多存了一个“,”,所以移除的9800万 x 6列也只省下了200M的空间。
进
一步的数据清洗还是在移除无用数据和合并上。
对数据列的丢弃,除无效值和需求规定之外,一些表自身的冗余列也需要在这个环节清理,比如说表中的流水号是某两个字段拼接、类型描述等,通过对这些数据的丢弃,新的数据文件大小为4.73GB,足足减少了4.04G!
数据处理
使用 DataFrame.dtypes 可以查看每列的数据类型,Pandas默认可以读出int和float64,其它的都处理为object,需要转换格式的一般为日期时间。
DataFrame.astype() 方法可对整个DataFrame或某一列进行数据格式转换,支持Python和NumPy的数据类型。
df['Name'] = df['Name'].astype(np.datetime64)
对数据聚合,我测试了 DataFrame.groupby 和 DataFrame.pivot_table 以及 pandas.merge ,groupby 9800万行 x 3列的时间为99秒,连接表为26秒,生成透视表的速度更快,仅需5秒。
df.groupby(['NO','TIME','SVID']).count() # 分组fullData = pd.merge(df, trancodeData)[['NO','SVID','TIME','CLASS','TYPE']] # 连接actions = fullData.pivot_table('SVID', columns='TYPE', aggfunc='count') # 透视表
根据透视表生成的交易/查询比例饼图:
将日志时间加入透视表并输出每天的交易/查询比例图:
total_actions = fullData.pivot_table('SVID', index='TIME',
columns='TYPE', aggfunc='count')total_actions.plot(subplots=False, figsize=(18,6), kind='area')
除此之外,Pandas提供的DataFrame查询统计功能速度表现也非常优秀,7秒以内就可以查询生成所有类型为交易的数据子表:
tranData = fullData[fullData['Type'] == 'Transaction']
该子表的大小为 [10250666 rows x 5 columns]。
在此已经完成了数据处理的一些基本场景。
实验结果足以说明,在非“>5TB”数据的情况下,Python的表现已经能让擅长使用统计分析语言的数据分析师游刃有余。
为什么大家选择光环大数据!
大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请大数据领域具有多年经验的讲师,提高教学的整体质量与教学水准。
讲师团及时掌握时代的技术,将时新的技能融入教学中,让学生所学知识顺应时代所需。
通过深入浅出、通俗易懂的教学方式,指导学生较快的掌握技能知识,帮助莘莘学子实现就业梦想。
光环大数据启动了推进人工智能人才发展的“AI智客计划”。
光环大数据专注国内大数据和人工智能培训,将在人工智能和大数据领域深度合作。
未来三年,光环大数据将联合国内百所大学,通过“AI智客计划”,共同推动人工智能产业人才生态建设,培
养和认证5-10万名AI大数据领域的人才。
参加“AI智客计划”,享2000元助学金!
【报名方式、详情咨询】
光环大数据网站报名:
手机报名链接:http:// /mobile/。