一、描述数据
使用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')

2万+

被折叠的 条评论
为什么被折叠?



