pandas使用总结

说明:

  • pandas主要包含两大数据结构(Series和DataFrame) 

  • Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成

  • Series对象本质上是一个NumPy的数组,因此NumPy的数组处理函数可以直接对Series进行处理。但是Series除了可以使用位置作为下标存取元素之外,还可以使用标签下标存取元素,这一点和字典相似,每个Series对象都由两个数组组成:
        1) index: 它是从NumPy数组继承的Index对象,保存标签信息。
        2) values: 保存值的NumPy数组。

  • DataFrame:处理二维数据,Series的容器,最为常用

  • list:Python自带数据类型,功能简单,操作复杂,效率低 
    ndarray:基础数据类型,关注数据结构/运算/维度(数据间关系) 
    Series/DataFrame:扩展数据类型,关注数据与索引的关系,数据实际应用

    从实用性、功能强弱和和可操作性比较:list < ndarray < Series/DataFrame 
    效率对比出自此处,此篇博文总结很完善,值得一看

        pandas用法大全

        删除选取整理

        合并、转化、映射、替换整理 

1、DataFrame

import pandas as pd
from pandas import DataFrame

""" DataFrame删除操作 """
frame = DataFrame(np.arange(16).reshape((4,4)),index=['a','b','c','d'],columns=['one','two','three','four'])   # np.arange(16).reshape((4,4))创建4*4的矩阵
new_frame = frame.drop('a')     # 删除单行,返回的对象是删除剩余的数据对象
new_obj2 = obj.drop(['b','c'])  # 删除多行,返回的对象是删除剩余的数据对象
new_frame2 = frame.drop(['two','four'],axis = 1)   # 删除列
y = df.pop('Price')             # 删除df中值为'Price'的列,并将该列数据返回
df = df[df['A'].isin([1])]      # 删除/选取某列含有特定数值的行
df[df['A'].isin([1, 2])]        # 选取df1中A列包含数字1和2的行
df = df[~df['A'].isin([1])]     # 通过~取反,选取不包含数字1的行

""" 数据显示 """
df.describe()                  # 可以将行和列完整显示前几个数据

""" DataFrame修改列名操作 """
frame.reindex(['a','b','c','d'])    # 修改表行名,多余行默认填充NaN
frame3 = frame.reindex(columns = ['Ohio','Texas','Cali','Wile'],index=['a','b','c','d'],fill_value=4)     # 修改表列名,多余列默认填充4
frame5 = frame.ix[['a','b','c','d'], ['Ohio','Texas','Cali','Wile']]  # 同时改变行列索引

""" DataFrame筛选数据 """
frame[1:3] # 不闭合区间,行筛选数据,选择第1-2行数据
frame[frame['three'] > 8]   # 筛选出fram中three大于8的行
frame['one']                # 取one这一列数据
frame[['one','four']]       # 取one,four这两列数据
frame.ix['a']               # 按照行索引
frame.ix[['b','d']]         # b,d行数据
frame.ix[1]                 # 同样是按照行索引
frame.ix[1:3]               # 获取第2,3行数据
frame.ix[['b','d'],['one','three']]   # 取'b','d'行,'one','three'列数据

""" 算术运算 add 加法,sub 减法,div 除法,mul 乘法 """
df1 = DataFrame(np.arange(12).reshape((3,4)),columns=list('abcd'))
df2 = DataFrame(np.arange(20).reshape((4,5)),columns=list('abcde'))
df1+df2      # 普通的算术运算会产生缺失值
df1.add(df2,fill_value=0)   # 填充缺失值
series = frame.ix[0]        # 得到series
frame = frame - series      # DataFrame减series

""" 列行位置操作 """
df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', header=None)
y = df.iloc[1:100, 4].values   # 取第4列数据中的第1到100行数据,.value是将DataFrame类型转化为numpy.ndarray
df.iloc[0:100, [0, 2]]         # 取第一列和第二列的数据中的第1到100行数据,都是开区间

""" 与numpy 转化 """
values = df.head(10).values    # 直接由DataFrame类型转化为numpy中的array类型,list中包含list
frame = DataFrame(np.arange(16).reshape((4,4)),index=['a','b','c','d'],columns=['one','two','three','four'])  # 由numpy中array对象转化为DataFrame对象

""" 列插入 """
# 弹出某列数据
y = df.pop('Price')
# 将Price数据插入到尾列
df.insert(len(df.columns), 'Price', y)

数据清洗

  • DataFrame.drop_duplicates(subset=None, keep='first', inplace=False) 

功能:这个drop_duplicate方法是对DataFrame格式的数据,去除特定列下面的重复行。返回DataFrame格式的数据

          subset : column label or sequence of labels, optional 
                        用来指定特定的列,默认所有列
          keep :    {‘first’, ‘last’, False}, default ‘first’ 
                        删除重复项并保留第一次出现的项
          inplace : boolean, default False 
                        False-返回新的数据集(默认),True-在愿数据集上操作

  • df.dropna(axis=0, how='any', inplace=True)    

功能:只要一行中有空值就删除该行

参数:axis:0-行操作(默认),1-列操作 
           how:any-只要有空值就删除(默认),all-全部为空值才删除 
           inplace:False-返回新的数据集(默认),True-在原数据集上操作(此处一定要注意,如果在原数据集上操作的话,则不会有新的返回对象

2、Series

""" Series对象创建 """
series_obj = Series([4.5,1.3,5,-5.5],index=('a','b','c','d'),name='s3')    # 创建Series对象
mix = pd.Series( [3, '5', 7.0] )   # 此时的mix的类型为object,而不是像上面的int64
obj2 = series_obj.reindex(['a','b','c','e','f'])                   # 多余的列用NaN填充
obj3 = series_obj.reindex(['a','b','c','e','f'],fill_value='0')    # 多余的列使用0填充
s1 = pd.Series([3,5,7])
s2 = pd.Series( [3,5,7], index = list('ABC'))
s4 = s1.append(s2)                             # 合并Series对象
s4['f'] = 100                                  # 插入数据 

""" Series数据删除 """
obj = Series(np.arange(5),index=['a','b','c','d','e'])
new_obj = obj.drop('b')           # 删除某个索引
new_obj2 = obj.drop(['b','c'])    # 选择删除多个索引

""" Series数据筛选 """
obj['a'] 或 obj[1]                # 获取某个索引的值
obj[3:4]                          # 获取第4个索引的值
obj['a':'c']                      # 获取a到c索引的值
obj[['a','c']]                    # 只获取a索引和c索引的值

""" Series数据运算 """
import numpy as np
obj[['b','d']] *=2                # 乘法运算
s4 * 2                            # 每个值会自动乘2
s1 * s2                           # 自动对齐运算
np.sum(series1)                   # 不对齐运算,将series当做numpy运算
np.add(series1, series2)          # 等于series1 + series2
np.greater(series1, series2)      # 比较大小,返回series1>series2的对比列表,全是bool值
Series([1, 2, np.nan, 3, 4])      # isnull()和notnull()用来识别NaN元素

较为详细的讲解链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值