pandas基本使用(一)-- 利用python进行数据分析笔记(第五章)

import pandas as pd
from pandas import Series, DataFrame

Series

1. 创建Series

  1. 直接将列表创建为Series类型obj = pd.Series([4, 7, -5, 3]),此时索引为默认0~n
  2. 将索引替换为自定义值 obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
  3. 对字典直接转化Series: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
    obj3 = pd.Series(sdata)
  4. 字典转化但是根据索引顺序对应传值 sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000} ,states = ['California', 'Ohio', 'Oregon', 'Texas'] 提前根据索引定好顺序
    obj4 = pd.Series(sdata, index=states)

2. 查看Series

  • obj.index 查看索引
  • obj.index.name 索引列的名称
  • obj.name 表的名称
  • obj.value 查看值
  • obj[1]根据下标查看值
  • obj['a'] 根据索引查看值
  • obj[2:4] 切片显示
  • obj[ [1,3] ] 根据下标显示多个值
  • obj[ [ 'a', 'b', 'c' ] ] 同时查多个值,用双[ [ ] ]
  • obj[ 'a':'c' ] 索引切片显示多个
  • obj[ obj < 2 ] 条件布尔显示多个值

3. 布尔运算判断

d    4
b    7
a   -5
c    3
dtype: int64
  • print(obj2 > 0) 所有数判断TrueFalse
  • obj2[obj2 > 0] 根据判断选出True的行
  • 6 in obj2 错误表述: 判断索引是否在,不能直接判断值
  • 'e' in obj2 判断'e'索引是否存在
  • obj4.isnull() 判断哪些为空
  • obj4.notnull() 判断非空

4. 算数运算

  • obj1 + obj2 索引相同的对应相加,不同的不相加赋值为NaN,相对应但是有一方为NaN则结果为NaN
  • obj2 * 2 全部乘2
  • np.exp(obj2) 全部e的n次方

5. 修改

  • new_obj = obj.drop('c'),删除多行:obj.drop(['b', 'c']) drop()的删除某行时临时的,需要一个变量存储结果
  • 重新根据 行序列 排序 obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e']),可以新添加行序列,默认为空NaN
  • 自动填充–复制上一个值 obj3.reindex(range(6), method='ffill')
  • 根据索引大小排序 obj.sort_index()
  • 按照值排序obj.sort_values() 默认空值排到末尾
  • 计算出当前值所排的名次:obj.rank(method='first')

DataFrame

1. 创建

  1. 将等长的列表(非等长会报错)组成的字典转化为DataFrame
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
  1. columns 定长列表组成字典根据列索引顺序排序 转化为DataFrame
    pd.DataFrame(data, columns=['year', 'state', 'pop'])
  2. index 设置 行索引 的名称,如果 列索引 对应数据找不到则为空
    frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four','five', 'six'])

2. 查看显示

  • frame.head() 默认显示前5项

  • frame.columns 获取列索引

  • frame['state'] 根据列索引查看,可以赋值修改

  • frame[ ['a', 'b'] ]同时显示多列

  • frame[:2] 切片显示多行

  • frame[ frame['three'] > 5 ] 条件布尔查看

  • frame.loc[ 'three' ] 按 行索引值 查看

  • frame.loc['Colorado', ['two', 'three']] 先行后列

  • frame.iloc[ 2 ] 单行

  • frame.iloc[ [1,2], [3, 0, 1] ] 下标查看,先行后列

  • frame.state 根据列索引查看,但是修改值和删除不能用

  • frame.index.name 行向量名称,可以修改起别名

  • frame.columns.name 列向量名称,可以修改起别名

  • frame.values 查看整个表数据,以array格式显示,不会以表格形式表示

  • frame.index 显示行标签,index = frame.index, index[1:] 查看标签对象

  • 'a' in frame.columns判断列对象是否存在'a'

  • 2003 in frame.index 判断某索引是否存在

3. 修改

  • frame['state'] = np.arange(6)range(6) 对某列按顺序依次赋值,需要长度完全一致
  • frame['state'] = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five']) 通过Series赋值,需要完全匹配行索引,且必须有行索引,长度可以不一致,空位设空
  • del frame['state'] 删除某列
  • 临时删除需要变量存储结果frame.drop('a')删除单行, frame.drop(['a', 'b']) 删除多行
  • frame.drop('two', axis=1) 列删除,设置axis=1axis=columns
  • 彻底删除跟del一样frame.drop('c', inplace=True)
  • frame.T 转置
  • 根据索引大小排序:frame.sort_index()默认按行索引排序,frame.sort_index(axis=1, ascending=False)按列索引排序,降序
  • 按照值排序:frame.sort_values(by='b') 指定列号进行 行排序
  • 计算出当前值所排的名次:frame.rank(method='first', ascending=False, axis='columns') 默认为某列的行排序,axis='columns’则为某行的 列排序

3.1 reindex修改,不对原数据造成修改,临时的显示需要赋值另一变量存储

  • 重新根据 行序列 排序 obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e']),可以新添加行序列,默认为空NaN
  • 自动填充–复制上一个值 obj3.reindex(range(6), method='ffill')
  • 通过columns重新排列 列序列 states = ['Texas', 'Utah', 'California'], frame.reindex(columns=states)
  • df1.reindex(columns=df2.columns, fill_value=0) 将所有空值赋值为0

4. 运算

  • df1 + df2扩散运算,全部对应相加
  • df1.add(df2, fill_value=0) 在相加之前,将所以NaN赋值为0,然后再相加
  • 1/df1 == df1.rdiv(1) 对应相除
  • arr - arr[0]其中arr为3*4,此时扩散每行都减去arr[0]
  • arr.sub(arr[0], axis='index')此时为对每列都减去arr[0]
  • 函数运用np.abs(frame)
  • 自定义函数应用f = lambda x: x.max() - x.min(), frame.apply(f)frame作为参数x传入返回frame
  • ```def f(x): return pd.Series([x.min(), x.max()], index=[‘min’, ‘max’])frame.apply(f)` 返回的可以是一个列表而不仅仅是一个数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值