python如何安装pandas pandas 如何处理这种情况?

后使用快捷导航没有帐号?
Python入门之数据处理——12种有用的Pandas技巧
查看: 30587|
评论: |原作者: 黄念
译|来自: 大数据文摘
摘要: Python正迅速成为数据科学家偏爱的语言——这合情合理。它作为一种编程语言提供了更广阔的生态系统和深度的优秀科学计算库。在科学计算库中,我发现Pandas对数据科学操作最为有用。Pandas,加上Scikit-learn提供了数 ...
引言Python正迅速成为数据科学家偏爱的语言——这合情合理。它作为一种编程语言提供了更广阔的生态系统和深度的优秀科学计算库。在科学计算库中,我发现Pandas对数据科学操作更为有用。Pandas,加上Scikit-learn提供了数据科学家所需的几乎全部的工具。本文旨在提供在Python中处理数据的12种方法。此外,我还分享了一些让你工作更便捷的技巧。在继续学习之前,我会建议你阅读一下数据挖掘(data exploration)的代码。为了帮助你更好地理解,我使用了一个数据集来执行这些数据操作和处理。数据集:我使用了贷款预测(Loan Prediction)问题的数据集。请先下载数据集(如果你需要这个数据集,请在评论区联系我们并请留下电子邮件地址——编者注),然后就可以开始了。我们开始吧从导入模块和加载数据集到Python环境这一步开始:# 1–布尔索引&如果你想根据另一列的条件来筛选某一列的值,你会怎么做?例如,我们想获得一份完整的没有毕业并获得贷款的女性名单。这里可以使用布尔索引实现。你可以使用以下代码:# 2–Apply函数Apply是一个常用函数,用于处理数据和创建新变量。在利用某些函数传递一个数据帧的每一行或列之后,Apply函数返回相应的值。该函数可以是系统自带的,也可以是用户定义的。举个例子,它可以用来找到任一行或者列的缺失值。由此我们得到了需要的结果。注:第二个输出中使用了head()函数,因为结果中包含很多行。# 3–填补缺失值‘fillna()’可以一次性解决:以整列的平均数或众数或中位数来替换缺失值。让我们基于其各自的众数填补出“性别”、“婚姻”和“自由职业”列的缺失值。&#首先导入函数来判断众数结果返回众数和其出现频次。请注意,众数可以是一个数组,因为高频的值可能有多个。我们通常默认使用第一个:现在,我们可以填补缺失值并用# 2中提到的方法来检查。#填补缺失值并再次检查缺失值以确认# 4–透视表Pandas可以用来创建MS 风格的透视表。例如,在本例中一个关键列是“贷款数额”有缺失值。我们可以根据“性别”,“婚姻状况”和“自由职业”分组后的平均金额来替换。 “贷款数额”的各组均值可以以如下方式确定:# 5–多索引如果你注意到#3的输出,它有一个奇怪的特性。每一个索引都是由3个值组合构成的。这就是所谓的多索引。它有助于快速执行运算。从# 3的例子继续开始,我们有每个组的均值,但还没有被填补。这可以使用到目前为止学习到的各种技巧来解决。#只在有缺失贷款值的行中进行迭代并再次检查确认注意:1. 多索引需要在loc中声明的定义分组的索引元组。这个元组会在函数中用到。2. .values[0]后缀是必需的,因为默认情况下元素返回的索引与原数据框的索引不匹配。在这种情况下,直接赋值会出错。# 6. 交叉表此函数用于获取数据的一个初始“感觉”(视图)。在这里,我们可以验证一些基本假设。例如,在本例中,“信用记录”被认为显著影响贷款状况。这可以使用交叉表验证,如下图所示:这些是值。但是,要获得快速的见解,用百分比更直观。我们可以使用apply 函数来实现:现在,很明显,有信用记录的人得到一笔贷款的可能性更高:与没有信用记录的人只有8%得到贷款相比,80%的有信用记录的人获得了一笔贷款。然而不仅如此。其中包含了更有趣的信息。由于我已经知道有一次信用记录是非常重要的,如果我预测拥有信用记录的人贷款状态是Y(贷款成功),而没有的人为N(贷款失败)。令人惊讶的是,我们在614个例子中会有82+378=460次的正确。这个比例高达75%!如果你仍纳闷为何我们还需要统计模型,我不会怪你。但是相信我,即使在目前这个精准度上再提高哪怕0.001%的精度仍会是一项充满挑战性的任务。你会接受这个挑战吗?注:这个75%是基于训练集的。测试集会略有不同,但接近。另外,我希望这能提供一些直觉,即到底为什么哪怕0.05%的精度提升,可造成Kaggle排行榜(数据分析竞赛网站——译者注)上的名次上升500位。# 7–合并数据帧当我们需要对不同来源的信息进行合并时,合并数据帧变得很重要。假设对于不同物业类型,有不同的房屋均价(INR/平方米)。让我们定义这样一个数据帧:现在,我们可以将原始数据帧和这些信息合并:透视表验证了成功的合并操作。请注意,“value”在这里是无关紧要的,因为在这里我们只简单计数。# 8–数据帧排序Pandas允许在多列之上轻松排序。可以这样做:注:Pandas的“排序”功能现在已不再推荐。我们用“sort_values”代替。# 9–绘图(箱线图和柱状图)很多人可能没意识到,箱线图和柱状图可以直接在Pandas中绘制,不必另外调用matplotlib。这只需要一行命令。例如,如果我们想通过贷款状况来比较申请人收入的分布,我们可以这样做:可见收入本身并不是一个决定性因素, 因为获得/未获得贷款的人没有明显的收入差异。# 10–Cut函数用于分箱有时如果数值聚类会更有意义。例如,如果我们试图用时间(分钟)对交通状况(路上的车流量)建模。相比于如“早晨”“下午”“傍晚”“晚上”“深夜”这样的时段,具体分钟数可能对预测交通量不那么相关。如此对交通建模会更直观,也避免过度拟合。在这里,我们定义了一个简单可复用的函数,可以轻松地用于对任何变量的分箱。# 11–编码名义变量有时,我们会遇到必须修改名义变量的类别的情况。这可能是由于以下各种原因:1. 一些(如逻辑回归)要求所有的输入都是数值型,因此名义变量常被编码为0, 1…(n-1)2. 有时同一个类别可以用两种方式来表示。如温度可能被记录为“High(高)”“Medium(中)”“Low(低)”“H(高)”“low(低)”。在这里,无论是“High(高)”还是“H(高)”是指同一类。同理,“Low(低)”和“low(低)”也是同一类。但是,Python会将它们视为不同分类。3. 有些类别的频率可能非常低,把它们归为一类一般会是个好主意。在这里,我定义了一个通用的函数,以字典的方式输入值,使用Pandas中“replace”函数来重新对值进行编码。编码前后计数不变,证明编码成功。。# 12–在一个数据帧的行上进行迭代这不是一个常用的操作。毕竟你不想卡在这里,是吧?有时你可能需要用for循环迭代所有的行。例如,我们面临的一个常见问题是在Python中对变量的不正确处理。这通常在以下两种情况下发生:1. 数值类型的名义变量被视为数值2. 带字符的数值变量(由于数据错误)被认为是分类变量。所以手动定义变量类型是一个好主意。如果我们检查所有列的数据类型:在这里,我们看到名义变量“Credit_History(信用记录)”被当做浮点数类型。解决这些问题的一个好方法是创建一个包括列名和类型的CSV文件。这样,我们就可以定义一个函数来读取文件,并指定每一列的数据类型。例如,我在这里已经创建了一个CSV文件datatypes.csv,如下所示:加载这个文件后,我们可以在每一行上进行迭代,以列类型指派数据类型给定义在“type(特征)”列的变量名。现在的信用记录列被修改为“object”类型,这在Pandas中表示名义变量。结语本文中,我们涉及了Pandas的不同函数,那是一些能让我们在探索数据和功能设计上更轻松的函数。同时,我们定义了一些通用函数,可以重复使用以在不同的数据集上达到类似的目的。欢迎加入本站公开兴趣群软件开发技术群兴趣范围包括:,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流QQ群:源代码研究群兴趣范围包括:Hadoop源代码解读,改进,优化,场景定制,与Hadoop有关的各种开源项目,总之就是玩转HadoopQQ群:&
刚表态过的朋友 ()
上一篇:下一篇:Python数据处理:Pandas模块的 12 种实用技巧 - Python - 伯乐在线
& Python数据处理:Pandas模块的 12 种实用技巧
Python 正迅速成为数据科学家们更为钟爱的编程语言。形成该现状的理由非常充分:Python 提供了一种覆盖范围更为广阔的编程语言生态系统,以及具有一定计算深度且性能良好的科学计算库。如果您是 Python 初学者,建议首先看下。
在 Python 自带的科学计算库中,Pandas 模块是最适于数据科学相关操作的工具。它与 Scikit-learn 两个模块几乎提供了数据科学家所需的全部工具。本文着重介绍了 Python 中数据处理的 12 种方法。此前的文章里也分享了一些技巧和经验,这些将有助于您提高工作效率。
在本文开始前,推荐读者首先了解一些的相关代码。为使本文更易于理解,我们事先选定了一个数据集以示范相关操作和处理方法。
数据集来源:本文采用的是问题的数据集。请下载该数据集并开始本文内容。
让我们开始吧
首先导入相关模块并加载数据集到 Python 环境中:
import pandas as pd
import numpy as np
data = pd.read_csv("train.csv", index_col="Loan_ID")
import pandas as pdimport numpy as npdata = pd.read_csv("train.csv", index_col="Loan_ID")
#1 – 布尔索引
如果需要以其它列数据值为条件过滤某一列的数据,您会怎么处理?例如建立一个列表,列表中全部为未能毕业但曾获得贷款的女性。这里可以使用布尔索引,代码如下:
data.loc[(data["Gender"]=="Female") & (data["Education"]=="Not Graduate") & (data["Loan_Status"]=="Y"),
["Gender","Education","Loan_Status"]]
data.loc[(data["Gender"]=="Female") & (data["Education"]=="Not Graduate") & (data["Loan_Status"]=="Y"), ["Gender","Education","Loan_Status"]]
更多内容请参阅:
#2 – Apply 函数
Apply 函数是处理数据和建立新变量的常用函数之一。在向数据框的每一行或每一列传递指定函数后,Apply 函数会返回相应的值。这个由 Apply 传入的函数可以是系统默认的或者用户自定义的。例如,在下面的例子中它可以用于查找每一行和每一列中的缺失值。
#Create a new function:
def num_missing(x):
return sum(x.isnull())
#Applying per column:
print "Missing values per column:"
print data.apply(num_missing, axis=0) #axis=0 defines that function is to be applied on each column
#Applying per row:
print "nMissing values per row:"
print data.apply(num_missing, axis=1).head() #axis=1 defines that function is to be applied on each row
1234567891011
#Create a new function:def num_missing(x):&&return sum(x.isnull())&#Applying per column:print "Missing values per column:"print data.apply(num_missing, axis=0) #axis=0 defines that function is to be applied on each column&#Applying per row:print "nMissing values per row:"print data.apply(num_missing, axis=1).head() #axis=1 defines that function is to be applied on each row
这样我们就得到了所需的结果。
注:由于输出结果包含多行数据,第二个输出函数使用了 head() 函数以限定输出数据长度。在不限定输入参数时 head() 函数默认输出 5 行数据。
更多内容请参阅:
#3 – 填补缺失值
fillna() 函数可一次性完成填补功能。它可以利用所在列的均值/众数/中位数来替换该列的缺失数据。下面利用“Gender”、“Married”、和“Self_Employed”列中各自的众数值填补对应列的缺失数据。
#First we import a function to determine the mode
from scipy.stats import mode
mode(data['Gender'])
#First we import a function to determine the modefrom scipy.stats import modemode(data['Gender'])
输出结果为:ModeResult(mode=array([‘Male’], dtype=object), count=array([489]))
输出结果返回了众数值和对应次数。需要记住的是由于可能存在多个高频出现的重复数据,因此众数可以是一个数组。通常默认使用第一个众数值:
mode(data['Gender']).mode[0]
mode(data['Gender']).mode[0]
现在可以进行缺失数据值填补并利用#2方法进行检查。
#Impute the values:
data['Gender'].fillna(mode(data['Gender']).mode[0], inplace=True)
data['Married'].fillna(mode(data['Married']).mode[0], inplace=True)
data['Self_Employed'].fillna(mode(data['Self_Employed']).mode[0], inplace=True)
#Now check the #missing values again to confirm:
print data.apply(num_missing, axis=0)
#Impute the values:data['Gender'].fillna(mode(data['Gender']).mode[0], inplace=True)data['Married'].fillna(mode(data['Married']).mode[0], inplace=True)data['Self_Employed'].fillna(mode(data['Self_Employed']).mode[0], inplace=True)&#Now check the #missing values again to confirm:print data.apply(num_missing, axis=0)
至此,可以确定缺失值已经被填补。请注意,上述方法是最基本的填补方法。包括缺失值建模,用分组平均数(均值/众数/中位数)填补在内的其他复杂方法将在接下来的文章中进行介绍。
更多内容请参阅:
#4 – 数据透视表
Pandas 可建立 MS Excel 类型的数据透视表。例如在下文的代码段里,关键列“LoanAmount” 存在缺失值。我们可以根据“Gender”,“Married”和“Self_Employed”分组后的平均金额来替换。 “LoanAmount”的各组均值可由如下方法确定:
#Determine pivot table
impute_grps = data.pivot_table(values=["LoanAmount"], index=["Gender","Married","Self_Employed"], aggfunc=np.mean)
print impute_grps
#Determine pivot tableimpute_grps = data.pivot_table(values=["LoanAmount"], index=["Gender","Married","Self_Employed"], aggfunc=np.mean)print impute_grps
更多内容请参阅:
#5 – 复合索引
如果您注意观察#3计算的输出内容,会发现它有一个奇怪的性质。即每个索引均由三个数值的组合构成,称为复合索引。它有助于运算操作的快速进行。
从#3的例子继续开始,已知每个分组数据值但还未进行数据填补。具体的填补方式可结合此前学到的多个技巧来完成。
#iterate only through rows with missing LoanAmount
for i,row in data.loc[data['LoanAmount'].isnull(),:].iterrows():
ind = tuple([row['Gender'],row['Married'],row['Self_Employed']])
data.loc[i,'LoanAmount'] = impute_grps.loc[ind].values[0]
#Now check the #missing values again to confirm:
print data.apply(num_missing, axis=0)
#iterate only through rows with missing LoanAmountfor i,row in data.loc[data['LoanAmount'].isnull(),:].iterrows():&&ind = tuple([row['Gender'],row['Married'],row['Self_Employed']])&&data.loc[i,'LoanAmount'] = impute_grps.loc[ind].values[0]&#Now check the #missing values again to confirm:print data.apply(num_missing, axis=0)
1. 多值索引需要在 loc 语句中使用用于定义索引分组的元组结构。该元组会在函数中使用。
2. 应使用后缀 .values[0] 以避免潜在的错误。因为默认情况下复合索引返回的 Series 元素索引顺序与所在的数据框架(dataframe)不一致。在此条件下直接赋值会产生错误。
#6 – Crosstab 函数
该函数用于获取数据的初始印象(直观视图),从而验证一些基本假设。例如在本例中,“Credit_History”被认为会显著影响贷款状态。这个假设可以通过如下代码生成的交叉表进行验证:
pd.crosstab(data["Credit_History"],data["Loan_Status"],margins=True)
pd.crosstab(data["Credit_History"],data["Loan_Status"],margins=True)
以上这些都是绝对值。但百分比形式能获得更为直观的数据结果。使用 apply 函数可实现该功能:
def percConvert(ser):
return ser/float(ser[-1])
pd.crosstab(data["Credit_History"],data["Loan_Status"],margins=True).apply(percConvert, axis=1)
def percConvert(ser):&&return ser/float(ser[-1])&&pd.crosstab(data["Credit_History"],data["Loan_Status"],margins=True).apply(percConvert, axis=1)
现在可以证明:与仅占9%的无信用记录人群相比,占比为80%的有信用记录人群获得贷款的几率会更高。
但这并不是全部的数据结果,其中还包含了一个有趣的内容。既然已知有信用记录非常重要,如果利用信用记录情况进行贷款预测会如何?其中,预测有信用记录的人的获得贷款状态为 Y,否则为 N。令人吃惊的是在614次测试中,共正确预测了 82+378=460 次,正确率高达75%!
如果您正好奇为什么我们需要统计模型,我一点儿也不会责怪您。但是请相信,提高预测精度是一项非常具有挑战性的任务,哪怕仅仅是在上述预测结果的基础上提高0.001%的预测精度也是如此。您会接受这个吗?
注:75% 是对本文的训练数据集而言。测试数据集的结果将会有所不同,但也非常接近。同样地,希望通过这个例子能让大家明白为什么仅仅提高0.05%的预测精度就可在Kaggle排行榜中排名跃升500位。
更多内容请参阅:
#7 – 合并数据框(DataFrames)
当有来自不同数据源的信息需要收集整理时,合并数据框就变成了一项必不可少的基本操作。考虑一个假设的情况,即不同类型的房产有不同的均价(单位:INR / 平方米)。定义数据框如下:
prop_rates = pd.DataFrame([, 12000], index=['Rural','Semiurban','Urban'],columns=['rates'])
prop_rates
prop_rates = pd.DataFrame([1000, 5000, 12000], index=['Rural','Semiurban','Urban'],columns=['rates'])prop_rates
现在可将上述信息与原始数据框合并如下:
data_merged = data.merge(right=prop_rates, how='inner',left_on='Property_Area',right_index=True, sort=False)
data_merged.pivot_table(values='Credit_History',index=['Property_Area','rates'], aggfunc=len)
data_merged = data.merge(right=prop_rates, how='inner',left_on='Property_Area',right_index=True, sort=False)data_merged.pivot_table(values='Credit_History',index=['Property_Area','rates'], aggfunc=len)
上述透视表验证了合并操作成功。需要注意的是由于上述代码仅对数据值进行简单计算,因此‘values’参数在本例中是一个独立内容,与上下文无关。
更多内容请参阅:
#8 – 排列数据框架(DataFrames)
Pandas 允许基于多列数据进行简单排列。具体实现如下:
data_sorted = data.sort_values(['ApplicantIncome','CoapplicantIncome'], ascending=False)
data_sorted[['ApplicantIncome','CoapplicantIncome']].head(10)
data_sorted = data.sort_values(['ApplicantIncome','CoapplicantIncome'], ascending=False)data_sorted[['ApplicantIncome','CoapplicantIncome']].head(10)
注:Pandas模块中的“sort”函数现已不再使用,应用“sort_values”函数进行代替。
更多内容请参阅:
#9 – 绘图(Boxplot 和 Histogram 函数)
许多人也许并没有意识到 Pandas 模块中的 boxplots 和 histograms 函数可以用于直接绘图,此时没有必要再单独调用 matplotlib 模块。一行命令即可完成相关功能。例如,如果想通过 Loan_Status 比较 ApplicantIncome 的分布情况,则实现代码如下:
import matplotlib.pyplot as plt
%matplotlib inline
data.boxplot(column="ApplicantIncome",by="Loan_Status")
import matplotlib.pyplot as plt%matplotlib inline&data.boxplot(column="ApplicantIncome",by="Loan_Status")
data.hist(column="ApplicantIncome",by="Loan_Status",bins=30)
data.hist(column="ApplicantIncome",by="Loan_Status",bins=30)
上图的数据结果表明,由于获得贷款人群和未获得贷款人群数没有明显的收入差距,因此个人收入水平高低并非是否能获得贷款的主要决定因素。
更多内容请参阅:|
#10 – 使用 Cut 函数进行分箱
有时将数值数据聚合在一起会更有意义。例如,如果我们要根据一天中的某个时间段(单位:分钟)建立交通流量模型模型(以路上的汽车为统计目标)。与具体的分钟数相比,对于交通流量预测而言一天中的具体时间段则更为重要,如“早上”、 “下午”、“傍晚”、“夜晚”、“深夜(Late Night)”。以这种方式建立交通流量模型则更为直观且避免了过拟合情况的发生。
下面的例子中定义了一个简单的可重用函数,该函数可以非常轻松地实现任意变量的分箱功能。
def binning(col, cut_points, labels=None):
#Define min and max values:
minval = col.min()
maxval = col.max()
#create list by adding min and max to cut_points
break_points = [minval] + cut_points + [maxval]
#if no labels provided, use default labels 0 ... (n-1)
if not labels:
labels = range(len(cut_points)+1)
#Binning using cut function of pandas
colBin = pd.cut(col,bins=break_points,labels=labels,include_lowest=True)
return colBin
#Binning age:
cut_points = [90,140,190]
labels = ["low","medium","high","very high"]
data["LoanAmount_Bin"] = binning(data["LoanAmount"], cut_points, labels)
print pd.value_counts(data["LoanAmount_Bin"], sort=False)
12345678910111213141516171819202122
#Binning:def binning(col, cut_points, labels=None):&&#Define min and max values:&&minval = col.min()&&maxval = col.max()&&&#create list by adding min and max to cut_points&&break_points = [minval] + cut_points + [maxval]&&&#if no labels provided, use default labels 0 ... (n-1)&&if not labels:&&&&labels = range(len(cut_points)+1)&&&#Binning using cut function of pandas&&colBin = pd.cut(col,bins=break_points,labels=labels,include_lowest=True)&&return colBin&#Binning age:cut_points = [90,140,190]labels = ["low","medium","high","very high"]data["LoanAmount_Bin"] = binning(data["LoanAmount"], cut_points, labels)print pd.value_counts(data["LoanAmount_Bin"], sort=False)
Read More:
更多内容请参阅:
#11 – 为名义变量编码
通常我们会遇到需要对名义变量进行分类的情况。可能的原因如下:
1. 一些算法(如逻辑回归算法)要求输入参数全部为数字。因此名义变量多需要编码为0, 1….(n-1)。
2. 有时同一种分类可以表示为两种形式。如温度可能被记录为“高(High)”、“中(Medium)”、“低(Low)”、“高(H)”、“低(low)”。在这里,“高(High)”和“高(H)”都表示同一种分类。类似地在“低(Low)”和“低(low)”的表示方法中仅存在大小写的区别。但 python 将会将它们视为不同的温度水平。
3.一些分类的出现频率可能较低,因此将这些分类归为一类不失为一个好主意。
下面的例子中定义了一个通用函数,该函数使用字典作为输入,并利用 Pandas 模块的‘replace’函数对字典值进行编码。
#Define a generic function using Pandas replace function
def coding(col, codeDict):
colCoded = pd.Series(col, copy=True)
for key, value in codeDict.items():
colCoded.replace(key, value, inplace=True)
return colCoded
#Coding LoanStatus as Y=1, N=0:
print 'Before Coding:'
print pd.value_counts(data["Loan_Status"])
data["Loan_Status_Coded"] = coding(data["Loan_Status"], {'N':0,'Y':1})
print 'nAfter Coding:'
print pd.value_counts(data["Loan_Status_Coded"])
12345678910111213
#Define a generic function using Pandas replace functiondef coding(col, codeDict):&&colCoded = pd.Series(col, copy=True)&&for key, value in codeDict.items():&&&&colCoded.replace(key, value, inplace=True)&&return colCoded #Coding LoanStatus as Y=1, N=0:print 'Before Coding:'print pd.value_counts(data["Loan_Status"])data["Loan_Status_Coded"] = coding(data["Loan_Status"], {'N':0,'Y':1})print 'nAfter Coding:'print pd.value_counts(data["Loan_Status_Coded"])
编码前后的计数结果一致,证明编码正确。
更多内容请参阅:
#12 – 对数据框的行数据进行迭代
这个操作不经常使用。但您也不希望被这个问题卡住,对吧?有时需要利用 for 循环对所有行数据进行迭代。例如一个常见的问题即是 Python 中变量的不当处理。通常发生在如下情况:
1.带有数字的名义变量被认为是数值数据。
2.由于数据错误,带有字符的数值变量输入行数据中时被认为是分类变量。
因此手动定义列数据类型会是一个不错的主意。如果检查所有列数据的数据类型:
#Check current type:
data.dtypes
#Check current type:data.dtypes
会看到名义变量 Credit_History 被显示为 float 类型。解决这种问题的一个好方法即是创建一个包含列名和对应类型的 csv 文件。这样就可以定义一个通用函数来读取文件,并指定列数据的类型。例如在下面的例子里建立了一个 csv 文件“”。
#Load the file:
colTypes = pd.read_csv('datatypes.csv')
print colTypes
#Load the file:colTypes = pd.read_csv('datatypes.csv')print colTypes
加载数据后可以对每一行进行迭代,并利用‘type’列中的数据内容确定‘feature’列中对应变量名的数据类型。
#Iterate through each row and assign variable type.
#Note: astype is used to assign types
for i, row in colTypes.iterrows():
#i: row: each row in series format
if row['type']=="categorical":
data[row['feature']]=data[row['feature']].astype(np.object)
elif row['type']=="continuous":
data[row['feature']]=data[row['feature']].astype(np.float)
print data.dtypes
#Iterate through each row and assign variable type.#Note: astype is used to assign types&for i, row in colTypes.iterrows():&&#i: row: each row in series format&&&&if row['type']=="categorical":&&&&&&&&data[row['feature']]=data[row['feature']].astype(np.object)&&&&elif row['type']=="continuous":&&&&&&&&data[row['feature']]=data[row['feature']].astype(np.float)print data.dtypes
现在 credit history 列被定义为了 ‘object’ 类型,该类型即为 Pandas 模块中用于表示名义变量的数据类型。
更多内容请参阅:
在这篇文章中,我们介绍了 Pandas 的多个函数,这些函数使得我们数据挖掘和特征工程上更加轻松。同时我们定义了一些可重用的通用函数,以在处理不同的数据集时可以获得类似目标结果。
另请参见:如果您有任何关于 Pandas 模块或 Python 的疑问,请随时与我们。
关于作者:
可能感兴趣的话题
谁有这个数据源分享下
或者留下类似云盘等链接 谢过
o 255 回复
关于 Python 频道
Python频道分享 Python 开发技术、相关的行业动态。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线}

我要回帖

更多关于 python pandas读取csv 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信