数据清理
rename()函数在需要重命名某些选定列时非常有用,因为我们只需要指定要重命名的列的信息。
# Rename columns df = df.rename({'Name':'Student','Algebra':'Math'}, axis='columns')
在DataFrame中,有时许多数据集只是带着缺失的数据的,或者因为它存在而没有被收集,或者它从未存在过。
NaN(非数字的首字母缩写)是一个特殊的浮点值,所有使用标准IEEE浮点表示的系统都可以识别它
pandas将NaN看作是可互换的,用于指示缺失值或空值。有几个有用的函数用于检测、删除和替换panda DataFrame中的空值。
# Checks for null Values, Returns Boolean Arrray check_for_nan = df.isnull()
要检查panda DataFrame中的空值,我们使用isnull()或notnull()方法。方法返回布尔值的数据名,对于NaN值为真。在相反的位置,notnull()方法返回布尔值的数据,对于NaN值是假的。
value = df.notnull() # Opposite of df2.isnull()
我们使用dropna()函数删除所有缺少值的行。
drop_null_row = df.dropna() # Drop all rows that contain null values
有时,我们可能只是想删除缺失值的列。
# Drop all columns that contain null values drop_null_col = df.dropna(axis=1)
我们可以使用fillna()来填充缺失的值。例如,我们可能想用0替换' NaN '。
replace_null = df.fillna(0) # Replace all null values with 0
或者用平均值替换NaN。
# Replace all null values with the mean (mean can be replaced with almost any function from the statistics module) df = round(df.fillna(df.mean()),2)
方法可用于替换DataFrame中的值
one = df.replace(100,'A') # Replace all values equal to 1 with 'one'
筛选、排序和分组
找到看到物理成绩达到80或80以上的学生
fil_80 = df[df['Physics'] > 80]
学生在化学考试中得到80分或更高的分数,数学考试中却不到90分
fil = df[(df['Chemistry'] > 80) & (df['Math'] < 90)]
sort_values ()可以以特定的方式对pandas数据进行排序。通常回根据一个或多个列的值对panda DataFrame进行排序,或者根据panda DataFrame的行索引值或行名称进行排序。
例如,我们希望按学生的名字按升序排序。
ascending = df.sort_values('Student')
化学分数按降序排列
descending = df.sort_values('Chemistry',ascending=False)
更复杂一点的,我们希望按物理分数的升序排序,然后按化学分数的降序排序。
df.sort_values(['Physics','Chemistry'],ascending=[True,False])
groupby 是一个非常简单的概念。我们可以创建一组类别,并对类别应用一个函数。这是一个简单的概念,但却是我们经常使用的极有价值的技术。Groupby的概念很重要,因为它能够有效地聚合数据,无论是在性能上还是在代码数量上都非常出色。
通过性别进行分组
group_by = df.groupby(['Sex']) # Returns a groupby object for values from one column group_by.first() # Print the first value in each group
计算性别分组的所有列的平均值
average = df.groupby(‘Sex’).agg(np.mean)
统计数据
我们可能熟悉Excel中的数据透视表,可以轻松地洞察数据。类似地,我们可以使用panda中可用的pivot_table()函数创建Python pivot表。该函数与group_by()函数非常相似,但是提供了更多的定制。
假设我们想按性别将值分组,并计算物理和化学列的平均值和标准差。我们将调用pivot_table()函数并设置以下参数:
index设置为 'Sex',因为这是来自df的列,我们希望在每一行中出现一个唯一的值
values值为'Physics','Chemistry' ,因为这是我们想应用一些聚合操作的列
aggfunc设置为 'len','np.mean','np.std
pivot_table = df.pivot_table(index='Sex', values=['Physics','Chemistry'], aggfunc=[len, np.mean, np.std])
注意:使用len的时候需要假设数据中没有NaN值。
description()用于查看一些基本的统计细节,如数据名称或一系列数值的百分比、平均值、标准值等。
df.describe() # Summary statistics for numerical columns
使用max()查找每一行和每列的最大值
# Get a series containing maximum value of each row max_row = df.max(axis=1)
# Get a series containing maximum value of each column without skipping NaN max_col = df.max(skipna=False)
类似地,我们可以使用df.min()来查找每一行或每列的最小值。
其他有用的统计功能:
sum():返回所请求的轴的值的总和。默认情况下,axis是索引(axis=0)。
mean():返回平均值
median():返回每列的中位数
std():返回数值列的标准偏差。
corr():返回数据格式中的列之间的相关性。
count():返回每列中非空值的数量。
总结
我希望这张小抄能成为你的参考指南。当我发现更多有用的Pandas函数时,我将尝试不断地对其进行更新。本文的代码
https://github.com/Nothingaholic/Python-Cheat-Sheet/blob/master/pandas.ipynb