情感测试
情感测试

您现在的位置: 情感测试简介_情感测试玩法 > 情感测试分数 > Python数据挖掘系列2Num

Python数据挖掘系列2Num

发布时间:2021-8-29 16:38:19   点击数:
白癜风的治疗偏方 http://m.39.net/pf/a_5066150.html

来源

PythonDataAnalysis3rdEdition

作者

Navlani,etal.

翻译

Harper

校对

gongyouliu

编辑

auroral-L

全文共字,预计阅读时间40分钟。

第二章NumPy和pandas(下)

10.Boolean和fancyindexing

11.数组的广播(Broadcasting)机制

12.创建pandasDataFrames

13.了解pandasSeries

14.读取和查询Quandl数据

15.描述pandasDataFrames

16.PandasDataFrames的分组与连接

17.处理缺失的值

18.创建数据透视表

19.处理日期

20.总结

21.参考文献

10.Boolean和fancyindexing

索引技术可帮助我们从NumPy数组中选择和过滤元素。在本节中,我们将重点介绍booleanindexing和fancyindexing。Booleanindexing使用布尔表达式代替索引(在方括号中)来过滤NumPy数组。此索引返回布尔表达式中的真值元素:

#CreateNumPyArrayarr=np.arange(21,41,2)print("OrignialArray:\n",arr)#BooleanIndexingprint("AfterBooleanCondition:",arr[arr30])Output:OrignialArray:[]AfterBooleanCondition:[31]

Fancyindexing是一种特殊的索引类型,其中数组的元素由索引数组选择。这意味着传递括号中的索引数组。fancyindexing还支持多维数组。这将帮助我们选择和修改复杂的多维数组集。让我们看一个如下的例子来理解fancyindexing:

#CreateNumPyArrayarr=np.arange(1,21).reshape(5,4)print("OrignialArray:\n",arr)#Selecting2ndand3rdrowindices=[1,2]print("Selected1stand2ndRow:\n",arr[indices])#Selecting3ndand4throwindices=[2,3]print("Selected3rdand4thRow:\n",arr[indices])Output:OrignialArray:[[][][][][]]Selected1stand2ndRow:[[][]]Selected3rdand4thRow:[[][]]

在前面的代码中,我们创建了5*4矩阵,并使用整数索引选择了行。你还可以通过下图可视化此输出:

我们看如下代码:

#Createrowandcolumnindicesrow=np.array([1,2])col=np.array([2,3])print("SelectedSub-Array:",arr[row,col])Output:SelectedSub-Array:[]

前面的示例生成第一个值[1,2]和第二个值[2,3],并将其作为行索引和列索引。数组将在第一个索引值和第二个索引值处选择值,分别是7和12。

11.数组的广播(Broadcasting)机制

Python列表不支持直接向量化算术运算。与基于Python列表循环的操作相比,NumPy提供了更快的向量化数组操作。在这里,所有循环操作都是使用C而不是Python来执行的,这会使它执行得更快。广播功能检查运用在不同形状的数组上的二元函数的一系列规则(例如加,减和乘)。

我们来看一个广播的例子:

#CreateNumPyArrayarr1=np.arange(1,5).reshape(2,2)print(arr1)Output:[[12][34]]#CreateanotherNumPyArrayarr2=np.arange(5,9).reshape(2,2)print(arr2)Output:[[56][78]]#Addtwomatricesprint(arr1+arr2)Output:[[68][]]

在前面的三个示例中,我们可以看到两个相同大小的数组的加法。这个概念被称为广播:

#Multiplytwomatricesprint(arr1*arr2)Output:[[][]]

在前面的示例中,两个矩阵相乘。接下来我们应用标量值执行加法和乘法:

#Addascalervalueprint(arr1+3)Output:[[45][67]]#Multiplywithascalarvalueprint(arr1*3)Output:[[36][]]

在前面的两个示例中,示例1的结果是矩阵1加上了标量值,示例二是矩阵1乘以标量值。

12.创建pandasDataFrames

pandas库旨在与panel数据或表格数据一起使用。pandas是一种快速,高效且有生产力的工具,用于处理和分析字符串,数字,日期和时间序列等数据。pandas提供了诸如DataFrames和Series的数据结构。pandasDataFrame是一种具有行和列的表格化的数据结构,这种数据结构具有二维标签和索引。它的列是异构类型。它具有处理不同类型的对象,执行分组和合并操作,处理缺失值,创建数据透视表以及处理日期的功能。pandasDataFrame可以通过多种方式创建。现在我们来创建一个空的DataFrame:

#Importpandaslibraryimportpandasaspd#CreateemptyDataFramedf=pd.DataFrame()#Headerofdataframe.df.head()Output:_

在前面的示例中,我们创建了一个空的DataFrame。现在让我们使用列表字典(dictionaryofthelist)来创建一个DataFrame:

#Createdictionaryoflistdata={Name:[Vijay,Sundar,Satyam,Indira],Age:[23,45,46,52]}#CreatethepandasDataFramedf=pd.DataFrame(data)#Headerofdataframe.df.head()Output:NameAge0VijaySundarSatyamIndira52

在前面的代码中,我们使用了列表字典来创建DataFrame。此处,字典的关键字等效于列,而值等效于DataFrame的行。接下来我们使用字典列表(listofdictionaries)来创建一个DataFrame:

#PandasDataFramebylistsofdicts.#Initialisedatatolists.data=[{Name:Vijay,Age:23},{Name:Sundar,Age:25},{Name:Shankar,Age:26}]#CreatesDataFrame.df=pd.DataFrame(data,columns=[Name,Age])#Printdataframeheaderdf.head()

在前面的代码中,使用了字典列表创建DataFrame。在列表中,每个项都是一个字典。每个项的关键字是列的名称,而值是行单元格的值。现在我们使用元组列表(listoftuples)来创建一个DataFrame:

#CreatingDataFrameusinglistoftuples.data=[(Vijay,23),(Sundar,45),(Satyam,46),(Indira,52)]#Createdataframedf=pd.DataFrame(data,columns=[Name,Age])#Printdataframeheaderdf.head()Output:NameAge0VijaySundarShankar26

在前面的代码中,使用元组列表创建DataFrame。在列表中,每一项都是一个元组,每个元组都等同于列的行。

13.了解pandasSeries

pandasSeries是一维顺序数据结构,能够处理任何类型的数据,例如字符串,数字,日期,Python列表以及带有标签和索引的字典。Series是DataFrame的列之一。我们可以使用Python字典,NumPy数组和标量值来创建一个Series。我们还将在本节的后半部分看到pandasSeries的功能和特性。接下来我们来创建一些PythonSeries:

√使用Python字典:创建一个字典(dictionary)对象并将其传递给Series对象。让我们看下面的例子:

#CreatingPandasSeriesusingDictionarydict1={0:Ajay,1:Jay,2:Vijay}#CreatePandasSeriesseries=pd.Series(dict1)#ShowseriesseriesOutput:0Ajay1Jay2Vijaydtype:object

√使用NumPy数组:创建一个NumPy数组对象,并将其传递给Series对象。让我们看下面的例子:

#LoadPandasandNumPylibrariesimportpandasaspdimportnumpyasnp#CreateNumPyarrayarr=np.array([51,65,48,59,68])#CreatePandasSeriesseries=pd.Series(arr)seriesOutput:dtype:int64

√使用单个标量值:要创建具有标量值的pandasSeries,要将标量值和索引列表传递给Series对象:

#loadPandasandNumPyimportpandasaspdimportnumpyasnp#CreatePandasSeriesseries=pd.Series(10,index=[0,1,2,3,4,5])seriesOutput:dtype:int64

接下来让我们看一看pandasSeries的一些功能:

√我们还可以通过选择一列(例如country)来创建Series,该列恰好是数据文件中的第一列。然后,显示在局部范围内的当前对象的类型:

#Importpandasimportpandasaspd#Loaddatausingread_csv()df=pd.read_csv("WHO_first9cols.csv")#Showinitial5recordsdf.head()

结果为以下输出:

在前面的代码中,我们已使用read_csv()函数读取WHO_first9cols.csv文件。你可以从以下GitHub位置下载此文件:

转载请注明:http://www.zmax-alibaba.com/qgfs/138107.html

网站简介 | 发布优势 | 服务条款 | 隐私保护 | 广告合作 | 合作伙伴 | 版权申明 | 网站地图

当前时间: