Series
Series 是一维带标签的数组,数组里可以放任意的数据(整数,浮点数,字符串,Python Object)。
创建
创建时默认索引值为整型索引,可以自己创建索引
- 直接创建
s = pd.Series(np.random.randn(5))
s = pd.Series(np.random.randn(5),index=[‘a’,‘b’,‘c’,‘d’,‘e’]) - 字典创建
key 转换为索引值
s = pd.Series(字典, index=list(‘abcd’)) - 标量创建
s = pd.Series(标量,index=list(‘索引值’))
类比学习array dict
类似numpy中array,也类似是类字典对象
具体见代码
标签对齐
在进行加减法时,会自动寻找相同的标签进行加减,没有相同的标签会显示为NaN
代码
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print(s)
#类比学习
##类比array
print('类比array')
print(s[0])
print(s[:3])
print(s[[1, 3, 4]])
print(np.exp(s))
print(np.cos(s))
##类比dict
s = pd.Series(np.random.randn(5), index=['a', 'bab', 'cc', 'dd', 'ee'])
print('类比dict')
print(s['a'])
s['ee'] = 5
print(s)
s['g'] = 100
print(s)
#标签对齐
s1 = pd.Series(np.random.randn(3), index=['a', 'c', 'e'])
s2 = pd.Series(np.random.randn(3), index=['a', 'd', 'e'])
print('标签对齐')
print(s1 + s2)
DataFrame
DataFrame是二维带行标签和列标签的数组。相当于一个 Excel 表格。
创建
df = pd.DataFrame(data, index=index, columns=columns)
其中 index 是行标签,columns 是列标签,data 可以是下面的数据
- 由一维 numpy 数组,list,Series 构成的字典
- 二维 numpy 数组
- 一个 Series
- 另外的 DataFrame 对象
pandas无法做行标签对齐操作
- 字典创建
- 结构化数据创建
- 字典列表创建
- 元组字典创建
- 从Series创建
列的基本操作
普通操作
assign操作
索引和选择
对应的操作,语法和返回结果
- 选择一列 -> df[col] -> Series
- 根据行标签选择一行 -> df.loc[label] -> Series
- 根据行位置选择一行 -> df.iloc[label] -> Series
- 选择多行 -> df[5:10] -> DataFrame
- 根据布尔向量选择多行 -> df[bool_vector] -> DataFrame
数据对齐
自动对齐
使用numpy函数
Pandas 与 numpy 在核心数据结构上是完全兼容的
代码
import pandas as pd
import numpy as np
##创建
#### 从字典创建
print('创建')
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
create=pd.DataFrame(d)
print('从字典创建')
print(create)
d = {'one' : [1, 2, 3, 4],
'two' : [21, 22, 23, 24]}
create=pd.DataFrame(d, index=['a', 'b', 'c', 'd'])
print(create)
#### 从结构化数据中创建
data = [(1, 2.2, 'Hello'), (2, 3., "World")]
create=pd.DataFrame(data)
print('从结构化数据中创建')
print(create)
pd.DataFrame(data, index=['first', 'second'], columns=['A', 'B', 'C'])
create=pd.DataFrame(data)
print(create)
#### 从字典列表创建
data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
print('从字典列表创建')
create=pd.DataFrame(data)
print(create)
pd.DataFrame(data, index=['first', 'second'])
create=pd.DataFrame(data)
print(create)
#### 从元组字典创建
d = {('a', 'b'): {('A', 'B'): 1, ('A', 'C'): 2},
('a', 'a'): {('A', 'C'): 3, ('A', 'B'): 4},
('a', 'c'): {('A', 'B'): 5, ('A', 'C'): 6},
('b', 'a'): {('A', 'C'): 7, ('A', 'B'): 8},
('b', 'b'): {('A', 'D'): 9, ('A', 'B'): 10}}
create=pd.DataFrame(data)
print('从元组字典创建')
print(create)
#### 从 Series 创建
s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
create=pd.DataFrame(s)
print('从 Series 创建')
print(create)
create=pd.DataFrame(s, index=['a', 'c', 'd'], columns=['A'])
print(create)
## 列选择/增加/删除
df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three', 'four'])
print('普通列选择/增加/删除')
print(df['one'])
df['three'] = df['one'] + df['two']
print(df)
df['flag'] = df['one'] > 0
print(df)
four = df.pop('four')
print(df)
df['one_trunc'] = df['one'][:2]
print(df)
df.insert(1, 'bar', df['one'])
print(df)
#### 使用 assign() 方法来插入新列
df = pd.DataFrame(np.random.randint(1, 5, (6, 4)), columns=list('ABCD'))
print('使用 assign() 方法来插入新列')
print(df)
df.assign(Ratio = df['A'] / df['B'])
print(df)
df.assign(AB_Ratio = lambda x: x.A / x.B, CD_Ratio = lambda x: x.C - x.D)
print(df)
##数据对齐
df1 = pd.DataFrame(np.random.randn(10, 4), index=list('abcdefghij'), columns=['A', 'B', 'C', 'D'])
print('数据对齐')
df2 = pd.DataFrame(np.random.randn(7, 3), index=list('cdefghi'), columns=['A', 'B', 'C'])
print(df1 + df2)
print(df1 - df1.iloc[0])
##使用 numpy 函数
df = pd.DataFrame(np.random.randn(10, 4), columns=['one', 'two', 'three', 'four'])
print('使用 numpy 函数')
print(np.exp(df))
print(np.asarray(df) == df.values)
print(type(np.asarray(df)))
Panel
Panel 是三维带标签的数组。实际上,Pandas 的名称由来就是由 Panel 演进的,即 pan(el)-da(ta)-s。
- items: 坐标轴 0,索引对应的元素是一个 DataFrame
- major_axis: 坐标轴 1, DataFrame 里的行标签
- minor_axis: 坐标轴 2, DataFrame 里的列标签
创建
函数
- items:axis = 0
- major_axis : axis = 1
- minor_axis: axis = 2
- major_xs:从Major_axis维访问数据
- minor_xs:从Major_axis维访问数据
代码
import pandas as pd
import numpy as np
datapanel = {'Item1' : pd.DataFrame(np.random.randn(4, 3)),'Item2' : pd.DataFrame(np.random.randn(4, 2))}
pn = pd.Panel(datapanel)
print(pn)
print(pn['Item1'])
print(pn.items)
print(pn.major_axis)
print(pn.minor_axis)
# 函数
mx=pn.major_xs(pn.major_axis[0])
print(mx)
mnx=pn.minor_xs(pn.major_axis[1])
print(mnx)
pn.to_frame()