Pandas是一个受众广泛的python数据分析库。它提供了许多函数和方法来加快数据分析过程。pandas之所以如此普遍,是因为它的功能强大、灵活简单。本文将介绍20个常用的 Pandas 函数以及具体的示例代码,助力你的数据分析变得更加高效。
首先,我们导入 numpy
和 pandas
包。
import numpy as np import pandas as pd
1. Query
我们有时需要根据条件筛选数据,一个简单方法是query
函数。为了更直观理解这个函数,我们首先创建一个示例 dataframe。
values_1 = np.random.randint(10, size=10) values_2 = np.random.randint(10, size=10) years = np.arange(2010,2020) groups = ['A','A','B','A','B','B','C','A','C','C'] df = pd.DataFrame({'group':groups, 'year':years, 'value_1':values_1, 'value_2':values_2}) df
使用query
函数的语法十分简单:
df.query('value_1 < value_2')
2. Insert
当我们想要在 dataframe 里增加一列数据时,默认添加在最后。当我们需要添加在任意位置,则可以使用 insert
函数。使用该函数只需要指定插入的位置、列名称、插入的对象数据。
# new column new_col = np.random.randn(10) # insert the new column at position 2 df.insert(2, 'new_col', new_col) df
3. Cumsum
示例dataframe 包含3个小组的年度数据。我们可能只对年度数据感兴趣,但在某些情况下,我们同样还需要一个累计数据。Pandas提供了一个易于使用的函数来计算加和,即cumsum
。
如果我们只是简单使用cumsum
函数,(A,B,C)组别将被忽略。这样得到的累积值在某些情况下意义不大,因为我们更需要不同小组的累计数据。对于这个问题有一个非常简单方便的解决方案,我们可以同时应用groupby
和cumsum
函数。
df['cumsum_2'] = df[['value_2','group'].groupby('group').cumsum()] df
4. Sample
Sample
方法允许我们从DataFrame中随机选择数据。当我们想从一个分布中选择一个随机样本时,这个函数很有用。
sample1 = df.sample(n=3) sample1
上述代码中,我们通过指定采样数量 n
来进行随机选取。此外,也可以通过指定采样比例 frac
来随机选取数据。当 frac=0.5
时,将随机返回一般的数据。
sample2 = df.sample(frac=0.5) sample2
为了获得可重复的样品,我们可以指定random_state
参数。如果将整数值传递给random_state,则每次运行代码时都将生成相同的采样数据。
5. Where
where
函数用于指定条件的数据替换。如果不指定条件,则默认替换值为 NaN。
df['new_col'].where(df['new_col'] > 0, 0)
where
函数首先根据指定条件定位目标数据,然后替换为指定的新数据。上述代码中,where(df['new_col']>0,0)
指定'new_col'列中数值大于0的所有数据为被替换对象,并且被替换为0。
重要的一点是,pandas 和 numpy的where
函数并不完全相同。我们可以得到相同的结果,但语法存在差异。Np.where
还需要指定列对象。以下两行返回相同的结果:
df['new_col'].where(df['new_col'] > 0, 0) np.where(df['new_col'] > 0, df['new_col'], 0)
6. Isin
在处理数据帧时,我们经常使用过滤或选择方法。Isin
是一种先进的筛选方法。例如,我们可以根据选择列表筛选数据。
years = ['2010','2014','2017'] df[df.year.isin(years)]
7. Loc 和 iloc
Loc 和 iloc 函数用于选择行或者列。
- loc:通过标签选择
- iloc:通过位置选择
loc
用于按标签选择数据。列的标签是列名。对于行标签,如果我们不分配任何特定的索引,pandas默认创建整数索引。因此,行标签是从0开始向上的整数。与iloc
一起使用的行位置也是从0开始的整数。
下述代码实现选择前三行前两列的数据(iloc
方式):
df.iloc[:3,:2]
下述代码实现选择前三行前两列的数据(loc
方式):
df.loc[:2,['group','year']]
注:当使用loc
时,包括索引的上界,而使用iloc则不包括索引的上界。
下述代码实现选择"1","3","5"行、"year","value_1"列的数据(loc
方式):
df.loc[[1,3,5],['year','value_1']]