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。