Pandas常用接口
Series和Frame
Series类似于一维数组,由一组数据和索引组成
obj = Series([4, 7, -5, 3]) # 默认索引为0开始的int类型
obj = Series([4, 7, -5, 3], index = ['d', 'b', 'a', 'c']) # 手动设置索引
obj.values # 获得数据
obj.index # 获得索引
obj['d'] # 通过下标获取值
obj[['d', 'b', 'c']] # 一次获取多个值
'b' in obj # Series也可以看作定长有序字典
sdata = https://www.it610.com/article/{'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj = Series(sdata) # 通过python字典创建Series
pd.isunll(obj) # 判断obj中哪些值为NaN,对应pd.notnull(), obj.isnull()
obj.name = 'population'
obj.index.name = 'state' # 给obj设置名字
DataFrame是表格型数据,可以看成是Series组成的字典
data = https://www.it610.com/article/{'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002],
'population': [1.5, 1.7, 3.6, 2.4, 2.9]} # 创建data
frame = DataFrame(data) # 创建DataFrame
frame = DataFrame(data, columns = ['year', 'state', 'population']) # 设定column顺序
frame['state'] # 获取Series,等效于frame.state
frame.ix[2] # 获取行内容
frame.debt = np.arange(5.) # 给列赋值
frame['debt'] = Series([-1.5, -2.6, -4.5], index = ['TWO', 'THREE', 'FIVE']) # 通关Series给列赋值,依据index填充
frame['eastern'] = frame.state == 'Ohio' # 为不存在的列赋值会创建新列
del frame['eastern'] # 删除列
下图是可以用于构建DataFrame的数据
文章图片
initlist1.png
Index也是一个数组对象,只读
index = obj.index
'Ohio' in frame.cloumns # columns也是一个index数组
基础功能 reindex
# Series
obj = Series([4.5, 7.2, -5.3, 3.6], index = ['d', 'b', 'a', 'c'])
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e']) # reindex,不存在用NaN
obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=https://www.it610.com/article/0) # 用0填充空值
obj = Series(['blue', 'purple', 'yellow'], index = [0, 2, 4])
obj7.reindex(range(6), method='ffill') # 前项值填充,bfill后项值填充
# DataFrame
frame = DataFrame(np.arange(9).reshape((3, 3)), index=['a','c','d'], columns=['Ohio','Texas','California'])
frame.reindex(['a', 'b', 'c', 'd']) # 修改索引
states = ['Texas', 'Utah', 'California']
frame.reindex(columns=states) # 修改列索引
frame.reindex(index=['a', 'b', 'c', 'd'], method='ffill', columns=states) # 同时修改行列索引
frame.ix[['a', 'b', 'c', 'd'], states] # 等效于上一行
下图是reindex的参数列表
文章图片
paralist1.png
drop用于丢弃行
data = https://www.it610.com/article/DataFrame(np.arange(16).reshape((4, 4)), index = ['Ohio', 'Colorado', 'Utah', 'New York'], columns = ['one', 'two', 'three', 'four'])
data.drop(['Colorado', 'Utah']) # 丢弃行
data.drop('two', axis = 1) # 丢弃列
pandas的index切片末端是包含的
obj = Series(np.arange(4.), index = ['a', 'b', 'c', 'd'])
obj['b'] # == obj[1]
obj['b':'d'] # == obj[1:4],前面包含,后面不包含
data.ix['Colorado', ['two', 'three']] # 使用ix选取子集,使用column名
data.ix[['Colorado', 'Utah'], [3, 0, 1]] # 使用column序号选取
算数运算
df1 = DataFrame(np.arange(9.).reshape((3, 3)), columns = list('bcd'), index = ['Ohio', 'Texas', 'Colorado'])
df2 = DataFrame(np.arange(12.).reshape((4, 3)), columns = list('bce'), index = ['Utah', 'Ohio', 'Texas', 'Oregon'])
df1 + df2 # 使用运算符
df1.add(df2, fill_value = https://www.it610.com/article/0) # 使用函数
Series和DataFrame相加使用广播
np的函数也可以使用在pandas对象上
frame = DataFrame(np.random.randn(4, 3), columns = list('bde'), index = ['Utah', 'Ohio', 'Texas', 'Oregon'])
np.abs(frame)
f = lambda x: x.max() - x.min()
frame.apply(f) # 在行上应用函数
frame.apply(f, axis = 1) # 在列上应用函数
排序
obj = Series(range(4), index = ['d', 'a', 'b', 'c'])
obj.sort_index() # 根据index排序
obj.order() # 按值排序
frame.sort_index(by='b') # DataFrame按某列排序
frame.sort_index(by=['a', 'b']) # 按多列排序
obj.rank() # 排名,破坏平级关系
文章图片
paralist2.png
【Pandas常用接口】index是可重复的
obj = Series(range(5), index = ['a', 'a', 'b', 'b', 'c'])
obj.index.is_unique # False
obj['a'] # 返回一个Series
数学统计
df = DataFrame([[1.4, np.nan], [7.1, -4.5], [np.nan, np.nan], [0.75, -1.3]], index = ['a', 'b', 'c', 'd'], columns = ['one', 'two'])
df.sum() # 列求和
df.sum(axis = 1) # 行求和
df.idxmin() # 返回最小值的index
df.cumsum() # 累积求和
文章图片
funclist7.png
文章图片
funclist8.png
相关系数与协方差
相关系数: https://zh.wikipedia.org/wiki/%E7%9A%AE%E5%B0%94%E9%80%8A%E7%A7%AF%E7%9F%A9%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0
协方差: https://zh.wikipedia.org/wiki/%E5%8D%8F%E6%96%B9%E5%B7%AE
returns.MSFT.corr(returns.IBM) # 计算相关系数
returns.MSFT.cov(returns.IBM) # 计算协方差
缺失数据处理
data = https://www.it610.com/article/Series([1, np.nan, 3.5, np.nan, 7])
data.dropna() # 抛弃nan数据, 等价于data[data.notnull()]
data.fillna(0) # 使用0填充nan数据
data.fillna({1:0.5, 3:-1}) # 对不同行的nan填充不同数据
data.fillna(0, inplace=True) # fillna默认返回新对象,使用inplace参数进行就地修改
# DataFrame的dropna()函数默认丢弃行
文章图片
paralist3.png 层次化索引
data = https://www.it610.com/article/Series(np.random.randn(10), index = [['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'], [1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])
data.index # MultiIndex (类似于字典)
data.unstack() # 将数据重新安置到DataFrame中
data.unstack().stack() # 逆运算
frame = DataFrame(np.arange(12).reshape((4, 3)), index = [['a', 'a', 'b', 'b'], [1, 2, 1, 2]], columns = [['Ohio', 'Ohio', 'Colorado'], ['Green', 'Red', 'Green']]) # DataFrame中行列都可以用MultiIndex
frame.index.names = ['key1', 'key2']
frame.columns.names = ['state', 'color'] # 给行列设置名称
frame.swaplevel('key1', 'key2') # 交换层级
frame.sum(level='key2') # 选取level求和
frame = DataFrame({'a': range(7), 'b': range(7, 0, -1), 'c': ['one', 'two', 'three', 'four', 'five', 'six', 'seven'], 'd': [0, 1, 2, 0, 1, 2, 3]}) # 按列创建DataFrame
frame2 = frame.set_index(['c', 'd']) # 将列转换为index
frame2.reset_index() # 将index转换为列
数据存取 读取数据
pd.read_csv('ch1/ex1.csv') # 默认间隔符是逗号
pd.read_csv('ch1/ex2.csv', names=['a', 'b', 'c', 'd', 'message']) # 设定列名
pd.read_table('ch1/ex1.csv') # 默认间隔符是制表符
pd.read_table('ch1/ex3.csv', sep='\s+') # 也可以使用正则表达式作为分隔符
文章图片
paralist4.png
文章图片
paralist5.png 写入数据到文本
data.to_csv('ch1/out.csv')
Series.from_csv('ch1/tseries.csv') # 读取数据到Series
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 2020-04-07vue中Axios的封装和API接口的管理
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 调取接口时报404错误(ID:16)
- CICC(脑机接口,科幻几近成真())
- 数组常用方法一
- 接口|axios接口报错-参数类型错误解决
- 常用git命令总结
- java|java 常用知识点链接