- Series
- 初始化创建
- 通过字典创建
- 索引
- 数据对齐
- Dataframe
- 通过字典创建
- 初始化创建
- 索引
- 获取列值
- 获取行值
- 特别注意
- 数据对齐
- 删除`nan`值
- 排序
- 常用函数
初始化创建创建一维数据表
# 可以指定索引index sr1 = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10])) print(sr1) # A 0 # B 1 # C 2 # D 3 # E 4 # F 5 # G 6 # H 7 # I 8 # J 9 # dtype: int32 # 可以不指定索引 index 默认以0开始作为索引 sr2 = pd.Series(np.arange(10)) print(sr2) # 0 0 # 1 1 # 2 2 # 3 3 # 4 4 # 5 5 # 6 6 # 7 7 # 8 8 # 9 9 # dtype: int32通过字典创建
d = {"name": "zdz", "age": 13, "tel": "10000"}
sr1 = pd.Series(d)
print(sr1)
# name zdz
# age 13
# tel 10000
# dtype: object
索引
索引方式和之前的np中索引一样,可以数值索引,也可以直接按照字典的方式索引(sr[key])来获取某行的值
index属性用于获取所有的行索引值
使用iloc和loc两种方式进行索引,其中iloc是以行序号作为索引,而loc则是以行标签作为索引。
s = pd.Series(np.arange(10)) print(s) print(s[0]) # 0 获取第0行 print(s[[1, 2, 3]]) # 获取第1 2 3行 # 1 1 # 2 2 # 3 3 sr1 = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10])) print(sr1.index) # 获取行索引 # Index(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], dtype='object') sr = pd.Series(np.arange(20)) sr2 = sr[10:] print(sr2[10]) # sr2里面的索引代表的是标签值 key 不能表示sr2中元素的序号 # 要想用整数作为标签 则使用iloc 和 loc函数来作为区分 # # loc[key]里面的数字解释为key 也就是标签值 print(sr2.loc[10]) # 10 # print(sr2.loc[0]) # 报错 # 使用切片操作切出标签 前包后包 print(sr2.loc[10:13]) # 10 11 12 13 # iloc[idx]里面的数字解释为索引值 也就是元素序号 print(sr2.iloc[9]) # 19 print(sr2.iloc[0]) # 10 # 同样可以进行切片操作 切出前4行 前包后不包 print(sr2.iloc[0:4])数据对齐
通过相加操作可以将两个索引不按顺序对应的数组对齐。它会自动选择相同索引处的值相加。
sr1 = pd.Series([12, 23, 34], index=['c', 'a', 'd']) sr2 = pd.Series([1, 2, 3], index=['d', 'c', 'a']) sr = sr1 + sr2 print(sr) # a 26 # c 14 # d 35 # dtype: int64 sr3 = pd.Series([1, 2, 3, 4], index=['d', 'c', 'a', 'b']) sr = sr1 + sr3 print(sr) # a 26.0 # b NaN # c 14.0 # d 35.0 # dtype: float64 # 一个里面有 另一个里面没有 就设置为nan # 使用函数 add sub div mul fill_value = 0 用0补齐 sr = sr1.add(sr3) # 效果同上 print(sr) # a 26.0 # b NaN # c 14.0 # d 35.0 # dtype: float64 sr = sr1.add(sr3, fill_value=0) print(sr) # a 26.0 # b 4.0 # c 14.0 # d 35.0Dataframe
通过字典创建创建二维数据表
Dataframe是Series的容器
创建多维数组可以先指定列名,每个列下面可以用数组添加数据。
a = pd.Dataframe({'a': [1, 2, 3, 4], 'b': [5, 6, 7, 8]})
print(a) # 指定列名 字典为基础创建
# a b
# 0 1 5
# 1 2 6
# 2 3 7
# 3 4 8
初始化创建
可以同时指定行列名,若不指定,默认为从0开始的数字作为行列名。
t = pd.Dataframe(np.arange(12).reshape(3, 4), index=list("abc"), columns=list("ABCD"))
# index 指定行索引 columns指定列索引
print(t)
# A B C D
# a 0 1 2 3
# b 4 5 6 7
# c 8 9 10 11
t = pd.Dataframe(np.arange(12).reshape(3, 4)) print(t) # 0 1 2 3 # 0 0 1 2 3 # 1 4 5 6 7 # 2 8 9 10 11索引
获取列值直接以[]的方式进行索引获得的是列数据
iloc通过序号来索引行列数据
loc通过标签来索引行列数据
print(t['A']) # 获取A列数据 # a 0 # b 4 # c 8 # Name: A, dtype: int32 print(type(t['A'])) #获取行值print(t.loc[:, 'A']) # 获取A列数据 # a 0 # b 4 # c 8 # Name: A, dtype: int32 print(t.iloc[:, 1]) # 1列数据 # a 1 # b 5 # c 9 # Name: B, dtype: int32
print(t.loc['a']) # 获取'a'行数据 print(t.loc['a'][1]) # 1 获取a行1列的数据 只能这样获取 第二维可以使数字索引 print(t.loc['a']['B']) # 1 可以这样获取B列的数据 # print(t.loc['a', 1]) # 报错 print(t.loc['a', 'B']) # 1 获取a行1列的数据 第二维必须是列索引标签 不能是数字序号索引 print(t.loc['a']) # 获取'a'行数据 print(type(t.loc['a'])) #特别注意print(t.loc['a', :]) # 同上 print(type(t.loc['a', :])) # 同上 print(t.loc['a':'c']) # 获取a-c行数据 # A B C D # a 0 1 2 3 # b 4 5 6 7 # c 8 9 10 11 print(type(t.loc['a':'c'])) # print(t.loc['a':'c', 'A':'C']) # 获取a~c行 A~C列 # A B C # a 0 1 2 # b 4 5 6 # c 8 9 10 print(t.loc[['a', 'c'], ['A', 'C']]) # 获取a c行 A C列 # A C # a 0 2 # c 8 10 print(t.loc['a'][1]) # 1 获取a行1列的数据 只能这样获取 第二维可以使用数字索引 print(t.loc['a']['B']) # 1 可以这样获取B列的数据 # print(t.loc['a', 1]) # 报错 print(t.loc['a', 'B']) # 1 获取a行1列的数据 第二维必须是列索引标签 不能是数字 # 通过数字索引获取行数据 iloc === integer location print(t.iloc[0]) # 等价于t.loc['a'] # A 0 # B 1 # C 2 # D 3 # Name: a, dtype: int32 print(t.iloc[0, 1]) # 1 0行1列数据 print(t.iloc[0, :]) # 0行数据 # A 0 # B 1 # C 2 # D 3
通过列表获取的和直接通过行索引获取的得到的数据类型不一样。
print(t.loc['a']) print(type(t.loc['a'])) # A 0 # B 1 # C 2 # D 3 # Name: a, dtype: int32 #数据对齐print(t.loc[['a']]) print(type(t.loc[['a']])) # A B C D # a 0 1 2 3 #
df1 = pd.Dataframe({'x': [1, 2, 3, 4], 'y': [5, 6, 7, 8]}, index=['a', 'b', 'c', 'd'])
df2 = pd.Dataframe({'x': [0, 0, 1, 1], 'y': [2, 2, 3, 3]}, index=['a', 'b', 'c', 'd'])
df = df1 + df2 # 此处也可以使用add、mul、sub、div等函数 fill_value = 0 即可填充nan值为0
print(df1)
print(df2)
print(df)
# x y
# a 1 7
# b 2 8
# c 4 10
# d 5 11
df1.loc['d', 'y'] = np.nan df1.loc['d', 'x'] = np.nan # x y # a 1.0 7.0 # b 2.0 8.0 # c 4.0 10.0 # d NaN NaN删除nan值
print(df3.dropna(how="any", axis=0)) # 默认how = any axis=0 以行为依据 # x y # a 1.0 7.0 # b 2.0 8.0 print(df3.dropna(how='all')) # 列属性全为nan才会删除那一行 # x y # a 1.0 7.0 # b 2.0 8.0 # c NaN 10.0 print(df3.dropna(how="all", axis=1)) # x y # a 1.0 7.0 # b 2.0 8.0 # c NaN 10.0 # d NaN NaN print(df3.dropna(axis=0, how="all").dropna(axis=1)) # y # a 7.0 # b 8.0 # c 10.0排序
ac = df.sort_values(ascending=True, by='x') # 按照列排序 行为轴 print(ac) # x y # a 1 7 # b 2 8 # c 4 10 # d 5 11 ar = df.sort_values(ascending=False, by='a', axis=1) # 按照行排序 按照a这一行进行排序 列为轴 print(ar) # y x # a 7 1 # b 8 2 # c 10 4 # d 11 5 ai = df.sort_index(ascending=False) # 按照行索引排序 print(ai) # x y # d 5 11 # c 4 10 # b 2 8 # a 1 7 ai = df.sort_index(ascending=False, axis=1) # 按照列索引排序 print(ai) # y x # a 7 1 # b 8 2 # c 10 4 # d 11 5常用函数
注意轴axis的作用
print(df3.mean(axis=1)) # 行不变列变 说明求的是每一行的平均值 print(df3.mean(axis=0)) # 默认 列不变行变 说明求的是每一列的平均值 忽略nan值 print(df3.sum()) print(df3.sum(axis=1)) # nan视为0



