一:Pandas常用类Series
Series可以存储带有标签的一维数据。
Series 由两个主要部分组成:索引和数据。索引是每个元素的唯一标识符,类似于数组的下标;数据是实际存储在 Series 中的值。索引可以是整数、字符串或其他数据类型。
1.1:Series的属性
values:返回 Series 中的值,类型为 ndarray。
index:返回 Series 中的索引,类型为 Index。
dtype:返回 Series 中元素的数据类型。
name:返回 Series 的名称。
ndim:返回 Series 的维度,固定为 1。
shape:返回 Series 中数据的形状,固定为 (n,),其中 n 表示 Series 的长度。
size:返回 Series 中元素的数量,等同于 len(series)。
empty:返回一个布尔值,表示 Series 是否为空。
axes:返回一个包含 Series 索引和数据轴标签的列表。
values_counts():返回一个包含 Series 中唯一值及其出现次数的 Series。
astype(dtype):将 Series 中的数据类型转换为指定的类型。
isnull():返回一个布尔型的 Series,表示 Series 中的缺失值。
notnull():返回一个布尔型的 Series,表示 Series 中的非缺失值。
1.2:创建Series的三种方法:数组、列表和字典创建Series数据
# 创建Series
print('通过ndarry创建的series:\n',pd.Series(np.arange(5),index=['a','b','c','d','e'],name='ndarry'))
list1 = [0,1,2,3,4]
print('通过list创建的series:\n',pd.Series(list1,index=['a','b','c','d','e']))
dit = {'a':0,'b':1,'c':2,'d':3,'e':4}
print('通过dict创建的series:\n',pd.Series(dit))
1.3:访问Series数据
# 访问Series数据
series = pd.Series(dit)
print('访问位于第一个位置的数据:',series[0])
print('访问index为a的数据',series['a'])
bool = (series < 4)
print('bool类型的series为:\n',bool)
print('通过bool数据访问series数据:\n',series[bool])
1.4:更新、插入和删除Series数据
# 更新、插入和删除
series['a'] = 3
print('赋值更新后的series数据:\n',series)
series1 = pd.Series([5,6],index=['f','g'])
#print('插入新series后的series数据:\n',series.append(series1)) # append方法在将来会被移除,使用concat代替
print('插入新series后的series数据:\n',pd.concat([series,series1]))
series1['h'] = 7
print('在series后插入单个数据:\n',series1)
series.drop('e',inplace=True)
print('删除索引e对应的数据后的series:\n',series)
二:Pandas常用类DataFrame
DataFrame 本质上可以被视为一个二维数组或表格数据结构。它和R语言的dataframe数据集十分相似。
2.1:DataFrame属性
values:返回 DataFrame 中的值,类型为 ndarray。
index:返回 DataFrame 中的索引,类型为 Index。
columns:返回 DataFrame 中的列名,类型为 Index。
dtypes:返回 DataFrame 中每一列的数据类型,类型为 Series。
shape:返回 DataFrame 中数据的形状,类型为 tuple。
size:返回 DataFrame 中元素的数量,等同于 shape[0] x shape[1]。
empty:返回一个布尔值,表示 DataFrame 是否为空。
axes:返回一个包含行和列轴标签的列表。
ndim:返回 DataFrame 的维度,固定为 2。
describe():返回 DataFrame 中数值型数据的统计信息。
info():返回 DataFrame 对象的简要摘要,包括行列数量、数据类型、缺失值情况等。
head(n):返回 DataFrame 的前 n 行。
tail(n):返回 DataFrame 的后 n 行。
T:返回 DataFrame 的转置矩阵,即行列互换。
sort_index(axis, ascending):按轴排序。
sort_values(by, axis, ascending):按值排序。
loc[]:通过标签选择行或列。
iloc[]:通过位置选择行或列。
dropna():删除缺失值。
fillna(value):填充缺失值。
astype(dtype):将 DataFrame 中的数据类型转换为指定的类型。
isnull():返回一个布尔型的 DataFrame,表示 DataFrame 中的缺失值。
notnull():返回一个布尔型的 DataFrame,表示 DataFrame 中的非缺失值。
2.2:创建DataFrame
# 创建DataFrame
data = np.arange(10).reshape(5, 2, order='F') # 通过reshape将一维数组按列(默认按行)重塑成五行两列的二位数组
index = ['a', 'b', 'c', 'd', 'e']
columns = ['co1', 'co2']
df = pd.DataFrame(data, index=index, columns=columns)
print('通过ndarry创建的DataFrame:\n',df)
data = [[0, 5], [1, 6], [2, 7], [3, 8], [4, 9]]
df = pd.DataFrame(data, index=index, columns=columns)
print('通过list创建的DataFrame:\n',df)
data = {'col1': [0, 1, 2, 3, 4],
'col2': [5, 6, 7, 8, 9]}
df = pd.DataFrame(data, index=index)
print('通过dict创建的Dataframe:\n',df)
2.3:访问数据(也可用于访问Series数据)
1:按首尾访问
# 访问DataFrame数据
print('默认返回前5行数据:\n',df.head())
print('返回后2行数据:\n',df.tail(2))
print('DataFrame的第一列为:\n',df['col1'])
2.按标签访问
# loc方法
print('DataFrame的第一列为:\n',df.loc[:,'col1']) # loc方法中整行(列)用“:”代替,均为闭区间
print('访问多列数据:\n',df.loc[:,['col1','col2']])
print('访问单行数据:\n',df.loc['a',:])
print('访问多行数据:\n',df.loc[['a','b'],:])
print('访问多行多列:\n',df.loc[['a','b'],['col1','col2']])
print('DataFrame中col1大于1的数据为:\n',df.loc[df['col1'] > 1,'col1']) # 注意最后的'col1'使结果只返回了一列
3.按位置访问
# iloc方法
print('DataFrame中col1大于1的数据为:\n',df.iloc[df['col1'].values > 1,:]) # iloc方法只接受索引位置,前闭后开
2.4:排序(也可用于Series数据)
# 排序
print(df.sort_index(axis=0, ascending=False)) # 按索引排序ascending默认是False,表示升序
print(df.sort_values(by='col2', axis=0, ascending=True)) # 按值排序
print('按col2列排序,返回前4个最小值:\n',df.nsmallest(4,'col2'))
print('按col2列排序,返回前2个最大值:\n',df.nlargest(2,'col2'))
2.5:更新、插入和删除DataFrame数据
# 更新、插入和删除
df['col1'] = [10, 11, 12, 13, 14]
print('更新到后的DataFrame:\n',df)
df['col3'] = [15, 16, 17, 18, 19]
print('插入列后的DataFrame:\n',df)
print(df.drop('col3', axis=1, inplace=False)) # inplace为True就是修改原数据 (默认是False),axis为0表示按行,1表示按列操作
df.drop(df.index, inplace=True)
df.drop(df.columns, axis=1, inplace=True)
print('清空DataFrame数据:\n',df)
2.6:合并(也可用于Series数据)
# 合并
df1 = pd.DataFrame(data=[['A1', 'B1'], ['A2', 'B2'], ['A3', 'B3']], index=[1, 2, 3], columns=['A', 'B'])
df2 = pd.DataFrame(data=[['C1', 'D1', 'E1'], ['C2', 'D2', 'E2'], ['C3', 'D3', 'E3'], ['C4', 'D4', 'E4']], index=[1, 2, 3, 4], columns=['C', 'D', 'E'])
print('横向堆叠df1和df2:\n', df1.join(df2))
print('纵向堆叠df1和df2:\n', pd.concat([df1,df2]))
df3 = pd.DataFrame(data=[['A1', 'B1', 'C1'], ['A2', 'B2', 'C2'], ['A3', 'B3', 'C3']], index=[1, 2, 3], columns=['A', 'B', 'C'])
print('以名称为C的列为主键外合并:\n',pd.merge(df2,df3,how='outer',on='C'))