Pandas 的数据结构:Pandas 主要有 Series(一维数组),DataFrame(二维数组),Panel(三维数组),Panel4D(四维数组),PanelND(更多维数组)等数据结构。其中 Series 和 DataFrame 应用的最为广泛。
- Series 是一维带标签的数组,它可以包含任何数据类型。包括整数,字符串,浮点数,Python 对象等。Series 可以通过标签来定位。
- DataFrame 是二维的带标签的数据结构。我们可以通过标签来定位数据。这是 NumPy 所没有的。
创建 Series 数据类型的三种方法
arr = [0, 1, 2, 3, 4]
s1 = pd.Series(arr) # 如果不指定索引,则默认从 0 开始
s1
import numpy as np
n = np.random.randn(5) # 创建一个随机 Ndarray 数组
index = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
s2 = pd.Series(n, index=index)
s2
d = {‘a’: 1, ‘b’: 2, ‘c’: 3, ‘d’: 4, ‘e’: 5}
s3 = pd.Series(d)
s3
Series 基本操作
>1.修改索引操作
>s1.index = ['A', 'B', 'C', 'D', 'E'] # 修改后的索引
>2.纵向拼接
>s4 = s3.append(s1) # 将 s1 拼接到 s3
>3. Series 按指定索引删除元素
>s4 = s4.drop('e') # 删除索引为 e 的值
>4.按索引修改数值
>s4['A'] = 6 # 修改索引为 A 的值 = 6
>5.Series 按指定索引查找元素
>s4['B']
>6.Series 切片操作(例如对s4的前 3 个数据访问)
>s4[:3]
Series 运算操作
>1.加法(Series 的加法运算是按照索引计算,如果索引不同则填充为 `NaN`(空值))
>s1.add(s2)
>2.减法
>s1.sub(s2)
>3.乘法
>s1.mul(s2)
>4.除法
>s1.div(s2)
>5.求中位数
>s1.median()
>6.求最大值
>s1.max()
>7.求和
>s1.sum()
创建 DataFrame 数据类型
1. 通过 NumPy 数组创建 DataFrame(三个list,分别为值,索引,列名)
dates = pd.date_range('today', periods=6) # 定义时间序列作为 index
num_arr = np.random.randn(6, 4) # 传入 numpy 随机数组
columns = ['A', 'B', 'C', 'D'] # 将列表作为列名
df1 = pd.DataFrame(num_arr, index=dates, columns=columns)
df1
data = {'animal': ['cat', 'cat', 'snake', 'dog', 'dog', 'cat', 'snake', 'cat', 'dog', 'dog'],
'age': [2.5, 3, 0.5, np.nan, 5, 2, 4.5, np.nan, 7, 3],
'visits': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],
'priority': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
df2 = pd.DataFrame(data, index=labels)
df2
DataFrame 基本操作
>1.查看前5个值和后三个值
>df2.head()
>df2.tail(3)
>2.查看列名,值,以及索引
>df2.columns
>df2.values
>df2.index
>3.查看统计数据
>df2.describe()
>4.转置操作
>df2.T
>5.通过标签查询
>df2['age',’animal'.......]多列查询
>6.按行查询
>df2.iloc[1:3] # 查询 2,3 行
>7.按照坐标查询
>df3.iat[1,0] #2行1列的数据
>8.按照标签和索引进行查询
>df3.loc['f','age'] #f行,标签为age的数据
>9.添加列数据(创建一个series,然后添加)
>num = pd.Series([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], index=df3.index)
>df3['No.'] = num # 添加以 'No.' 为列名的新数据列
>10.丢弃数据
>data.drop('m1',axis=1) #相当于delete table a where yid='m1'
>data.drop(['a','c']) #相当于delete table a where xid='a' or xid='c'
>df5.dropna(how = 'any') #删除缺失值所在的行
>11.缺失值处理
>df4.fillna(value=3)
>12.条件查找 df['条件']
>df[df['age'] > 3]
>df[(df['animal'] == 'cat') & (df['age'] < 3)]
>df3[df3['animal'].isin(['cat', 'dog'])]
>13.行列索引切片
>df.iloc[2:4, 1:3] #2-4行切片,1-3列切片
>14.排序操作
>df.sort_values(by=['age', 'visits'], ascending=[False, True])
>15.DataFrame 多值替换
>df['priority'].map({'yes': True, 'no': False}) #yes替换为True,no为False
>16.分组操作
>df4.groupby('animal').sum()
DataFrame 文件操作
>1.CSV 文件写入
>df3.to_csv('animal.csv')
>2.CSV 文件读取
>df_animal = pd.read_csv('animal.csv')
>3.Excel 写入操作
>df3.to_excel('animal.xlsx', sheet_name='Sheet1')
>4.Excel 读取操作
>pd.read_excel('animal.xlsx', 'Sheet1', index_col=None, na_values=['NA'])
>5.求中位数
>s1.median()
>6.求最大值
>s1.max()
>7.求和
>s1.sum()