本文首发于公众号《深度学习与Python》
Pandas是数据处理和数据分析中最流行的Python库。本文将为大家介绍一些有用的Pandas信息,介绍如何使用Pandas的不同函数进行数据探索和操作。 包括如何导入数据集以及浏览,选择,清理,索引,合并和导出数据等常用操作的函数使用,这是一个很好的快速入门指南,如果你已经学习过pandas,那么这将是一个不错的复习。
pandas导入与设置
一般在使用pandas时,我们先导入pandas库。
import pandas as pd
pandas在默认情况下,如果数据集中有很多列,则并非所有列都会显示在输出显示中。 您可以使用以下代码行来设置输出显示中的列数:
pd.set_option('display.max_columns', 500)
500表示列的最大宽度。 也就是说,500意味着在调用数据帧时最多可以显示500列。 默认值仅为50。此外,如果想要扩展输显示的行数。 可以通过如下代码进行设置:
pd.set_option('display.max_rows', 500)
读取数据集
导入数据是开始的第一步,使用pandas可以很方便的读取excel数据或者csv数据,使用代码如下:
pd.read_csv("Soils.csv")
pd.read_excel("Soils.xlsx")
在括号内 “Soils.csv”是上传的数据文件名,一般如果数据文件不在当前工作路径,则需要加上路径信息。如果读取的文件没有列名,需要在程序中设置header,举例如下:
pd.read_csv("Soils.csv",header=None)
如果碰巧数据集中有日期时间类型的列,那么就需要在括号内设置参数parse_dates = [column_name],以便Pandas可以将该列识别为日期。 例如,如果数据集中有一个名为Collection_Date的日期列,则读取代码如下:
pd.read_excel("Soils.xls", parse_dates = ['Collection_Date'])
探索DataFrame
以下是查看数据信息的5个最常用的函数:
df.head():默认返回数据集的前5行,可以在括号中更改返回的行数。 示例: df.head(10)将返回10行。
df.tail():返回数据集的最后5行。同样可以在括号中更改返回的行数。
df.shape: 返回表示维度的元组。 例如输出(48,14)表示48行14列。
http://df.info():提供数据摘要,包括索引数据类型,列数据类型,非空值和内存使用情况。
df.describe():提供描述性统计数据。
统计某列数据信息
以下是一些用来查看数据某一列信息的几个函数:
df[‘Contour’].value_counts() : 返回计算列中每个值出现次数。
df[‘Contour’].isnull().sum():返回’Contour’列中的空值计数
df[‘pH’].notnull().sum():返回“pH”列中非空值的计数
df[‘Depth’].unique():返回’Depth’列中的唯一值
df.columns:返回所有列的名称
选择数据
列选择:如果只想选择一列,可以使用df[‘Group’]. 这里’Group’是列名。
要选择多个列,可以使用df[[‘Group’, ‘Contour’, ‘Depth’]]。
子集选择/索引:如果要选择特定的子集,我们可以使用.loc或.iloc方法。 基本使用方法如下:
df.loc[:,[‘Contour’]]:选择’Contour’列的所有数据。 其中单冒号:选择所有行。 在逗号的左侧,您可以指定所需的行,并在逗号的右侧指定列。
df.loc[0:4,[‘Contour’]]:选择“Contour”列的0到4行。
df.iloc[:,2]:选择第二列的所有数据。
df.iloc[3,:]:选择第三行的所有数据。
数据清洗
数据清洗是数据处理一个绕不过去的坎,通常我们收集到的数据都是不完整的,缺失值、异常值等等都是需要我们处理的,Pandas中给我们提供了多个数据清洗的函数。
数值替换
df.replace({'Topk': 'Top'}, inplace=True)
删除空值
df['pH'].dropna(inplace=True)
输入空值
df['pH'].fillna(df['pH'].mean(), inplace=True) #nulls are imputed with mean of pH column
删除行和列
df.drop(columns = ['Na'], inplace = True) #This drops the 'Na' column
df.drop(2, axis=0, inplace=True) #This drops the row at index 2
值得注意的是,axis = 0表示删除行。 您可以使用axis = 1来删除列。
更改列名称
df.rename(columns = {'Conduc' : 'Cond', 'Dens' : 'Density'}, inplace = True)
数据处理
您可以使用.apply
在数据.apply
的行或列中应用函数。 下面的代码将平方根应用于“Cond”列中的所有值。
df['Cond'].apply(np.sqrt)
数据分组
有时我们需要将数据分组来更好地观察数据间的差异。Pandas中提供以下几种方式对数据进行分组。 下面的示例按“Contour”列对数据进行分组,并计算“Ca”列中记录的平均值,总和或计数。
df.groupby(by=['Contour'])['Ca'].mean()
df.groupby(by=['Contour'])['Ca'].count()
df.groupby(by=['Contour'])['Ca'].sum()
也可以按多列进行数据分组。
df.groupby(by=['Contour', 'Gp'])['Ca'].mean()
合并多个DataFrame
将两个数据合并在一起有两种方法,即concat和merge。Concat适用于堆叠多个数据帧的行。
按列连接数据
pd.concat([df, df2], axis=1)
按行连接数据
pd.concat([df, df2], axis=0)
当您的数据帧之间有公共列时,合并适用于组合数据帧。
合并数据
pd.merge(df, df2, left_on='Contour', right_on='Contour', how='outer')
数据保存
在完成数据清洗后,就需要将数据输出到csv或excel文件中保存。如果要将数据输出到由制表符分隔的csv文件,请使用以下代码。 ‘\t’表示您希望它以制表符分隔。
df.to_csv('myDataFrame.csv', sep='\t')
输出到excel:
writer = pd.ExcelWriter('myDataFrame.xlsx')
df.to_excel(writer,'DataFrame')
writer.save()
参考:
https://towardsdatascience.com/pandas-for-people-in-a-hurry-59d966630ae0