Pandas中DataFrame基本函数整理(小结)

1. DataFrame的基本操作

1.1 创建DataFrame

Pandas中可以通过传入不同的数据类型来创建DataFrame,比如list、ndarray、dict、Series、等等。以下是一些常用的创建方法:

import pandas as pd

# 通过ndarray创建

arr = [[1, 2, 3], [4, 5, 6]]

df = pd.DataFrame(arr)

# 通过list创建

lst = [[1, 'Tom'], [2, 'Jerry'], [3, 'Mickey']]

cols = ['ID', 'Name']

df = pd.DataFrame(lst, columns=cols)

# 通过dict创建

dic = {'ID': [1, 2, 3], 'Name': ['Tom', 'Jerry', 'Mickey']}

df = pd.DataFrame(dic)

# 通过Series创建

s1 = pd.Series([1, 2, 3], name='A')

s2 = pd.Series(['a', 'b', 'c'], name='B')

df = pd.concat([s1, s2], axis=1)

需要注意的是,创建DataFrame时,如果传入的是二维数组(如lst和arr),则DataFrame的行列均由数组的行列构成。如果传入的是字典(如dic)或Series(如s1和s2),则字典或Series的key或name会被作为列名。

1.2 数据的选取

选取DataFrame的数据可以使用loc和iloc。其中,loc用于选择某个具体的行和列,iloc用于选择某个具体的位置(行和列的index)。

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})

# 通过loc选取

df.loc[0, 'A'] # 选取第0行第A列的数据

df.loc[0:1, 'A':'B'] # 选取第0行到第1行,AB列的数据

# 通过iloc选取

df.iloc[0, 0] # 选取第0行第0列的数据

df.iloc[0:2, 0:2] # 选取第0行到第1行,第0列到第1列的数据

需要注意的是,选取数据时,可以用":"(冒号)来代表“所有”。例如,df.loc[:, :]会选取整个DataFrame中的所有数据。

1.3 数据的修改

要修改DataFrame中的数据,可以直接赋值,也可以使用apply函数实现自定义函数的应用。

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})

# 直接赋值

df.loc[0, 'A'] = 10

df.iloc[0, 1] = 11

df['C'] = [10, 11, 12]

# 使用apply函数

def add_num(x):

return x + 1

df['B'] = df['B'].apply(add_num)

需要注意的是,如果要对整个DataFrame进行修改,则可以对DataFrame本身赋值。如果只是对某一列进行修改,则需要使用类似df['C'] = [10, 11, 12]的方法。另外,在使用apply函数时,返回值的类型必须与原数据的类型一致,否则会报错。

2. 数据筛选和过滤

2.1 数据排序

在Pandas中,可以使用sort_values进行数据的排序。sort_values默认是按照升序排序,可以通过传入ascending=False来进行降序排序。

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 3, 2], 'C': [0, 1, 2]})

df_sort = df.sort_values(by='B', ascending=False)

需要注意的是,sort_values返回的是一个新的DataFrame,不会修改原有的DataFrame。

2.2 数据筛选

在Pandas中,可以使用标准运算符"=="、">="、"<="等进行数据的筛选。另外,还可以使用isin函数对数据进行筛选。通过isin函数可以对某一列中的数据进行包含和不包含的判断。

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 3, 2], 'C': [0, 1, 2]})

df_filter = df[(df['B'] >= 3) & df['C'].isin([0, 1])]

需要注意的是,在使用多条件筛选时,每个条件需要用括号括起来。

2.3 数据匹配

在Pandas中,可以使用merge函数对两个DataFrame进行匹配。merge函数默认是按照列名相同来进行匹配,也可以通过指定on参数来指定匹配的列。

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})

df2 = pd.DataFrame({'key': ['A', 'B'], 'value2': [4, 5]})

df_merge = pd.merge(df1, df2, on='key')

需要注意的是,merge函数返回的是一个新的DataFrame,不会修改原有的DataFrame。并且,如果两个DataFrame中有相同列名的列,merge函数会自动将它们区分开来(一个以“_x”结尾,另一个以“_y”结尾)。

3. 数据汇总和分组

3.1 数据聚合

在Pandas中,可以使用groupby函数对数据进行分组。groupby函数默认是对DataFrame的所有列进行分组,也可以通过指定列名来进行分组。

import pandas as pd

df = pd.DataFrame({'A': ['a', 'b', 'a', 'b'], 'B': [1, 2, 3, 4], 'C': [2, 4, 6, 8]})

df_group = df.groupby('A').sum()

需要注意的是,groupby函数返回的是一个新的DataFrame,不会修改原有的DataFrame。sum函数是对每个分组进行求和,也可以通过其他函数(如mean、min、max、count、等)来进行聚合。

3.2 数据透视表

在Pandas中,可以使用pivot_table函数对数据进行透视。pivot_table函数默认对数据进行求平均值,也可以通过参数aggfunc来指定其他的聚合函数。

import pandas as pd

df = pd.DataFrame({'A': ['a', 'b', 'a', 'b'], 'B': [1, 2, 3, 4], 'C': [2, 4, 6, 8]})

df_pivot = df.pivot_table(index='A', values=['B', 'C'], aggfunc='sum')

需要注意的是,pivot_table函数返回的是一个新的DataFrame,不会修改原有的DataFrame。

3.3 数据整合

在Pandas中,可以使用concat函数对不同的DataFrame进行整合。concat函数默认是按照行进行整合,也可以通过指定axis参数来进行列的整合。

import pandas as pd

df1 = pd.DataFrame({'A': ['a', 'b', 'c'], 'B': [1, 2, 3]})

df2 = pd.DataFrame({'A': ['d', 'e', 'f'], 'B': [4, 5, 6]})

df_merge = pd.concat([df1, df2], axis=1)

需要注意的是,concat函数返回的是一个新的DataFrame,不会修改原有的DataFrame。

后端开发标签