数据整理_

一、描述数据

使用head可以查看数据集的前几行(默认查看前5行),使用tail可以查看最后几行;使用shape可以查看DataFrame中包含多少行多少列;使用describe可以查看任何数值型的列的基本描述统计量

二、浏览DataFrame

使用loc或iloc能选择一个或多个数据,也能选择一行或多行数据:

import pandas as pd
url=''
dataframe=pd.read_csv(url)
#选择第一行
dataframe.iloc[0]

可以使用“:”来定义要选择的行,比如选择第2、3、4行:

dataframe.iloc[1:4]

DataFrame的索引不必得是数值型,只要某一列在DataFrame中每一行的值是唯一的,就可以将其设置为索引。比如我们可以将乘客的名字设置为索引,然后通过名字来选择行:

#设置索引
dataframe=dataframe.set_index(dataframe['Name'])
#查看行
dataframe.loc['Allen,Miss Elisabeth Walton']

为了能选择一行或者部分行,pandas提供了两个方法:

当DataFrame的索引是一个标签时(例如,一个字符串),loc比较常用。

iloc并不是根据索引来查找数据的,而是根据行号来查找的,行号从0开始,逐次加1。

三、根据条件语句来选择行

根据某个条件语句来选择DataFrame的行数据。

#展示Sex列的值是female的前两行
dataframe[dataframe['Sex']=='female].head(2)

dataframe['Sex']=='female'就是条件语句。我们在它外面包了一层dataframe[]来告诉pandas:选择DataFrame中索引daraframe['Sex']的值是'female'的行数据。

四、替换值

dataframe['Sex'].replace("female","Woman").head(2)

五、重命名列

dataframe.rename(columns={'PClass':'Passenger Class'}).head(2)

如果想同时为所有的列重命名,下面一小段代码会很有用。它以旧列名为键,空字符串为值,创建了一个字典:

import collections
#创建字典
column_names=collections.defaultdict(str)
#创建键
for name in dataframe.columns:
    column_names[name]
#查看字典
column_names

六、查找唯一值

使用unique来查看由某一列中全部的唯一值组成的数组

dataframe['Sex'].unique()

还可以使用value_counts,它会显示所有的唯一值以及它们出现的次数。

使用nunique可以统计有多少个唯一值

dataframe['PClass'].nunique()

七、处理缺失值

isnull和notnull都能返回布尔型的值来表示一个值是否缺失

#筛选出缺失值,查看两行
dataframe[dataframe['Age'].isnull()].head(2)

 pandas用NumPy的NaN来表示缺失值。但值得注意的是,pandas没有实现NaN。例如,如果想要将所有包含male的字符串替换为缺失值的话,就会得到一条错误消息。要想使用NaN就需要先导入NumPy库。

允许用户指定一个值来代表缺失值:

#加载数据,设置缺失值
dataframe=pd.read_csv(url,na_values=[np.nan,'NONE',-999])

八、删除一列

要删除一列,最好的方式是使用drop方法,并传入参数axis=1(即坐标轴列)
dataframe.drop('Age',axis=1).head(2)

drop是删除一列的常用方法。还有一种方法是del dataframe['Age'],大部分情况下它都能很好的工作。

最好养成一个习惯,永远不使用pandas的inplace=True参数。很多pandas都包含一个inplace参数,当其被设置为True时,会直接修改DataFrame本身。在对数据进行一系列更复杂的处理时,这可能会产生一些问题,因为DataFrame会被视为可变对象。推荐将DataFrame视为不可变对象

#创建一个新的DataFrame
dataframe_name_dropped=dataframe.drop(dataframe.columns[0],axis=1)

九、删除一行

dataframe[dataframe['Sex']!='male'].head(2)

使用drop方法是个不错的选择(比如,使用df.drop([0,1],axis=0)来删除前两行),而更实用的方式时在df[]中插入布尔条件,因为可以用条件语句来删除一行或多行。

十、删除重复行

dataframe.drop_duplicates().head(2)

但drop_duplicates只删除那些所有列都完美匹配的行,只用某些列来检查重复行会是一个很常见的需求,使用subset参数就能实现:

dataframe.drop_duplicates(subset=['Sex'])

drop_duplicates默认保留重复行先出现的行,然后将剩余行删除。可以通过keep参数来改变

dataframe.drop_duplicates(subset=['Sex'],keep='last')

还有个相关的方法是duplicated,它返回一个布尔序列来表示某一行是否为重复的行。如果不想简单的将重复行删除,这个方法会是一个不错的选择。

十一、根据值对行分组

#根据Sex列的值来进行分组,并计算每一组的平均值
dataframe.groupby('Sex').mean()

经常会遇到这种情况:DataFrame的每一行代表的是一个人或一个事件,而我们需要根据某些标准对这些行分组并计算某个统计量。例如,假设一个DataFrame,其中每一行都是一家国际连锁餐厅分店的一条销售记录。如果想要知道每一家分店的销售总额,可以将销售记录按照分店分组并计算每一组的总和。

#按行分组,计算行数
dataframe.groupby('Survived')['Name'].count()

十二、对一列的所有元素应用某个函数

def uppercase(x):
    return x.upper()
dataframe['Name'].apply(uppercase)[0:2]

在数据清洗和数据整理中,apply是一个功能非常强大的函数。通常需要先写一个函数来执行某个有用的操作(列如,将姓和名分开、将字符串转换成浮点数等),然后对一列中的所有元素应用这个函数。

十三、对所有分组应用一个函数

dataframe.groupby('Sex').apply(lambdax:x.count())

十四、连接多个DataFrame

使用concat并设置参数axis=0,沿着行的方向来连接DataFrame:

import pandas as pd
data_a={'id':['1','2','3'],
        'first':['Alex','Amy','Allen'],
        'first':['Anderson','Ackerman','Ali']}
dataframe_a=pd.DataFrame(data_a,columns=['id','first','last'])
data_b={'id':['4','5','6'],
        'first':['Billy','Brian','Bran'],
        'last':['Bonder','Black','Balwner']}
dataframe_b=pd.DataFrame(data_b,columns=['id','first','last'])
#沿着行方向连接两个DataFrame
pd.concat([dataframe_a,dataframe_b],axis=0)

使用axis=1可以在列方向做连接

十五、合并两个DataFrame

要进行等值连接(inner join),就需要使用merge并用on参数来指定哪些列要合并:

pd.merge(dataframe_employees,dataframe_sales,on='employee_id',how='outer')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值