Python Pandas基础操作详解

目录
  • 数据结构&Series:
  • DataFrame的构建:
  • 索引操作:
  • DataFrame基本操作:
  • 广播运算:
  • 索引增删改查:
  • 字符串元素处理:
  • 数据规整:
  • 总结

数据结构&Series:

'''
series {索引 + 数据} 形式
索引是自动生成的
'''
#通过 list 创建
s1 = pd.Series([1, 2, 3, 4, 5])
#通过np数组创建
arr1 = np.arange(10)
s2 = pd.Series(arr1)
#自定义索引
s2 = pd.Series(arr1, index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'])
#单独查看值或索引
print(s1.values)
print(s1.index)
#字典索引超出 会显示nan 值 不会像数组创建series一样报错
#通过字典来创建series  由于字典无序 所以每次打印顺序可能不同, 所以可以添加索引 保证顺序
dict1 = {'姓名': '李宁', '班级': '三班', '年龄': '22'}
print(dict1)
s3 = pd.Series(dict1, index=['姓名', '班级', '年龄', '性别'])
#判断values是否为空nan
print(s3.isnull())
#判断values是否不为空
print(s3.notnull())
#通过下标取数据
print(s3[1])
#通过标签名取数字
print(s3['姓名'])
#选取多个
print(s2[[1, 5]])
#切片取值
print(s2[1:4])              #索引切边 是 左闭右开
print(s2['b':'h'])          #标签切片可以包含末端数据 如h
#bool索引取值
print(s2[s2>5])
#索引与数据的对应关系 不被 运算所影响
#name 属性
s2.name = '佳林'          #数组对象名---values标题
s2.index.name = '字母表'   #索引名  ---- index标题
#查看前三行
print(s2.head(3))
#查看后两行
print(s2.tail(2))
 

DataFrame的构建:

#构造多类型字典
data = {
    'a': [1, 2, 3, 4],
    'b': (5, 6, 7, 8),
    'c': np.arange(9, 13)
}
frame = pd.DataFrame(data)
#查看行索引
print(frame.index)
#查看列索引
print(frame.columns)
#查看values
print(frame.values)                        #返回nparray类型的二维数组
#指定行索引
frame = pd.DataFrame(data, index=['A', 'B', 'C', 'D'])
#指定列行索引
frame = pd.DataFrame(data, index=['A', 'B', 'C', 'D'], columns=['a', 'b', 'c', 'd'])
#series构成的字典构造dataframe
pd1 = pd.DataFrame({'a': pd.Series(np.arange(5)),
                    'b': pd.Series(np.arange(3, 5))
                    })
#dataframe的每列元素类型必须统一
#通过字典构造的字典来构造dataframe(嵌套)
data1 = {
    'a': {
        'apple': '3.6',
        'banan': '3.5'
    },
    'b': {
        'apple': '3.6',
        'banan': '3.5',
        'red': '3.7',
        'yellow': '3.8'
    }
}
#最内层字典的key是index
#外层字典的key是columns
#通过二位数组来构造dataframe----默认columns和index都是0-n
arr1 = np.arange(12).reshape(3, 4)
print(arr1)
frame1 = pd.DataFrame(arr1)
#字典构造的列表 构造 dataframe
li = [{'apple': '3.6', 'orange': '2.5'}, {'apple': '4.8', 'orange': '2.8'}, {'apple': '2.4'}]
li_data = pd.DataFrame(li)
#Series构成的列表 构成dataframe
l2 = [pd.Series(np.random.rand(3)), pd.Series(np.random.rand(3))]
l2_data = pd.DataFrame(l2)

索引操作:

ps = pd.Series(range(5))
pd1 = pd.DataFrame(np.arange(9).reshape(3, 3),
                   index=['a', 'b', 'c'], columns=['A', 'B', 'C'])
#重新索引 reindex 创建一个符合新索引的新对象
ps2 = ps.reindex(['a', 'b', 'c', 'd', 'e'])
print(ps2)           #因为新索引与之前的索引没有对应关系 所以values全为空!!!!
#dataframe行索引重建顺序调整
pd2 = pd1.reindex(['a', 'b', 'c', 'd'])
pd3 = pd1.reindex(columns= ['B', 'C', 'A', 'B'])

DataFrame基本操作:

np.random.seed(1)
pd1 = pd.DataFrame(np.random.randint(0, 10, size=(3, 5)), columns=['a', 'b', 'c', 'd', 'e'], index=['A', 'B', 'C'])
print(pd1)
#和numpy一样 进行转至 切片提取
# print(pd1.T)
print(pd1[:'B']['e'])          #第一个或只有一个[]默认是行索引index 第二个[]是columns
#增加列
pd1['f'] = [5, 5, 5]
print(pd1)
#删除列
del(pd1['d'])
print(pd1)
#修改行索引名----只能赋值
1\直接赋值法
pd1.index = ['a', 'b'........]
2\自定义函数法
def test_map(x):
    return x+'_ABC'
pd1.rename(index=test_map,inplace=True)
#修改列索引名
1\直接赋值
pd1.columns = []
2\用str进行广播操作 如整体去掉某符号
pd1.columns = pd1.columns.str.strip('$')
3\函数法
pd1.columns = pd1.columns.map(lambda x:x[1:])
4\rename属性
# 直接法(好处:也可只修改特定的列)----字典values替代key
df.rename(columns=('$a': 'a', '$b': 'b', '$c': 'c', '$d': 'd', '$e': 'e'}, inplace=True)
# 函数法
df.rename(columns=lambda x:x.replace('$',''), inplace=True)
#提取行、列的loc和iloc
#iloc是按索引位置提取
#loc是按标签提取
df.loc[:, 'a']                    #提取a列
df.loc[:, ['a', 'c']]             #提取ac列
df.loc[1]                         #提取行标签为1的行
df.iloc[1]                        #提取行位置为1的行也就是第二行
df.loc[:2]                        #提取多行
#loc没有左闭右开
df.loc[0:1, 'b']                  #提取行索引0-1包括1 的‘b'列
df1.loc['a':'B', 'c':'d']         #按标签提取某范围的行列
#多条件
df[(df['a']<=2) & (df['b']>=5)]
df.loc[(df['a']<=2) & (df['b']>=5)]
# 或 条件 不能使用 or
df[(df['a']<=2) | (df['b']>=5)]
df.loc[(df['a']<=2) | (df['b']>=5)]
 

广播运算:

arr = np.arange(12).reshape(3, 4)
print(arr)
#广播 每一行都减去第一行
print(arr-arr[0])
#默认series的行索引 匹配的是dataframe的列索引
df1 = pd.DataFrame(np.arange(12).reshape(4, 3), index=['a', 'b', 'c', 'd'], columns=list('ABC'))
s3 = df1.iloc[0]        #取第一行
print(s3)
print(df1 - s3)
#沿着列运算
print(df1.sub(s4, axis= 0))          

索引增删改查:

#增
##series
ps[4] = 9
print(ps)
ps1 = pd.Series({'v': 's', 'f': 's'})
pss = ps.append(ps1)                 #append拼接 这个方法不会影响原有数据
##dataframe
###增加列
df['d'] = [9, 8, 9]
###插入
df.insert(0, 'M', 1)            #在第0列插入M全为1
##高级标签索引--增加行loc
df.loc['q'] = 1
row = {'M': 's', 'a': 'b', 'b': 'w', 'c': 'w', 'd': 8}
dfnew = df.append(row, ignore_index=True)     #ignore_index:如果设置为true,则无视表的index,直接合并,合并后生成新的index。
#删
del ps[0]
#del只能删除dataframe的列
del df['M']
#*******drop******删除轴上的数据
#dataframe删除行
print(df.drop(['S', 'W']))
#指定轴删除列
print(df.drop(['a', 'c'], axis=1))
ps = pd.Series(range(1, 5))
#改
ps[0] = 888
print(ps)
df.a = 6
#修改行数据
df.loc['S'] = 888
#修改单个元素
df.loc['D', 'b'] = 8848
 

字符串元素处理:

in:

data = {'a': 'aeac@qq.com', 'b': 'stevan@famil.com', 'c': 'asda@asd.com', 'd': np.nan}
data = pd.Series(data)
print(data)
print(data.isnull())
#字符串查找
print(data.str.contains('qq'))
#分割
print(data.str.split(r'@'))
print(data.str.findall(r'@'))
#切片
print(data.str[:5])

out:

a         aeac@qq.com
b    stevan@famil.com
c        asda@asd.com
d                 NaN
dtype: object
a    False
b    False
c    False
d     True
dtype: bool
a     True
b    False
c    False
d      NaN
dtype: object
a         [aeac, qq.com]
b    [stevan, famil.com]
c        [asda, asd.com]
d                    NaN
dtype: object
a    [@]
b    [@]
c    [@]
d    NaN
dtype: object
a    aeac@
b    steva
c    asda@
d      NaN
dtype: object

数据规整:

pd.merge(data1, data2, on= '按照哪一行合并', how = 'left或right或outer或inner')
pd.merge(df_obj5, df_obj6, how='outer', left_index=True, right_index=True)
pd.merge(df_obj3, df_obj4, left_on='key', right_index=True)
pd.concat([df1, df2], join='inner\outer', axis=1
stack 列索引在最外层 columns在内层 变成series
外层索引为index内层索引变成columns--unstack()
g = df1.groupby(by='fruit')
for name,group in g:
    print(name)
    print('-'*30)
    print(group)
apple
------------------------------
   fruit color  price
0  apple   red    8.5
3  apple  cyan    7.8
banana
------------------------------
    fruit   color  price
1  banana  yellow    6.8
4  banana    cyan    6.4
orange
------------------------------
    fruit   color  price
2  orange  yellow    5.6
#利用字典来获取具体分组名的dataframe
s = dict(list(df1.groupby(by='fruit')))
s['apple']
def diff(arr):
    return arr.max() - arr.min()
df1.groupby(by='fruit')['price'].agg(diff)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Python基础之pandas数据合并

    一.concat concat函数是在pandas底下的方法,可以将数据根据不同的轴作简单的融合 pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False) axis: 需要合并链接的轴,0是行,1是列join:连接的方式 inner,或者outer 二.相同字段的表首尾相接 #现将表构成l

  • python Pandas库基础分析之时间序列的处理详解

    前言 在使用Python进行数据分析时,经常会遇到时间日期格式处理和转换,特别是分析和挖掘与时间相关的数据,比如量化交易就是从历史数据中寻找股价的变化规律.Python中自带的处理时间的模块有datetime,NumPy库也提供了相应的方法,Pandas作为Python环境下的数据分析库,更是提供了强大的日期数据处理的功能,是处理时间序列的利器. 1.生成日期序列 主要提供pd.data_range()和pd.period_range()两个方法,给定参数有起始时间.结束时间.生成时期的数目及时

  • Python基础之教你怎么在M1系统上使用pandas

    一.问题 目前为止,M1系统上还不能使用pip3安装pandas库,无法使用pandas进行数据分析和处理.虽然网上也有专门适配M1的python环境,但实施起来也比较麻烦,不够纯粹. 那在M1上,如何使用pandas? 二.方案 docker新版本已经支持M1了,我们不妨尝试一下,是否可以用vscode+docker使用pandas. 1.安装M1版本的docker 访问https://docs.docker.com/docker-for-mac/install/,下载M1版本的docker.

  • python pandas模块基础学习详解

    Pandas类似R语言中的数据框(DataFrame),Pandas基于Numpy,但是对于数据框结构的处理比Numpy要来的容易. 1. Pandas的基本数据结构和使用 Pandas有两个主要的数据结构:Series和DataFrame.Series类似Numpy中的一维数组,DataFrame则是使用较多的多维表格数据结构. Series的创建 >>>import numpy as np >>>import pandas as pd >>>s=p

  • Python Pandas基础操作详解

    目录 数据结构&Series: DataFrame的构建: 索引操作: DataFrame基本操作: 广播运算: 索引增删改查: 字符串元素处理: 数据规整: 总结 数据结构&Series: ''' series {索引 + 数据} 形式 索引是自动生成的 ''' #通过 list 创建 s1 = pd.Series([1, 2, 3, 4, 5]) #通过np数组创建 arr1 = np.arange(10) s2 = pd.Series(arr1) #自定义索引 s2 = pd.Ser

  • python字符串基础操作详解

    目录 字符串的赋值 单引号字符串赋值给变量 双引号字符串赋值给变量 三引号字符串赋值给变量(多行) 字符串的截取 截取指定位置的字符 获取指定位置之后的所有字符 截取指定位置之前的所有字符 获取所有的字符 获取指定倒数位置的字符,用[-]来进行表示 获取指定位置倒数之前的字符 获取两个位置之间的字符 字符串的基础使用方法 strip() lstrip() rstrip() lower() upper() capitalize() title() index() rindex() split()

  • Python pandas常用函数详解

    本文研究的主要是pandas常用函数,具体介绍如下. 1 import语句 import pandas as pd import numpy as np import matplotlib.pyplot as plt import datetime import re 2 文件读取 df = pd.read_csv(path='file.csv') 参数:header=None 用默认列名,0,1,2,3... names=['A', 'B', 'C'...] 自定义列名 index_col='

  • opencv3/python 鼠标响应操作详解

    鼠标回调函数: def setMouseCallback( windowName, #窗口名称 onMouse, #鼠标响应处理函数 param=None) #处理函数的ID event鼠标事件: event: EVENT_LBUTTONDBLCLK = 7 左键双击 EVENT_LBUTTONDOWN = 1 左键点击 EVENT_LBUTTONUP = 4 左键释放 EVENT_MBUTTONDBLCLK = 9 中间释放 EVENT_MBUTTONDOWN = 3 中间点击 EVENT_M

  • 关于Python字典(Dictionary)操作详解

    目录 一.创建字典 二.访问字典里的值 三.修改字典 四.删除字典元素 五.字典键的特性 六.字典内置函数&方法 Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} 也可如此创建字典 dict1 = { 'abc': 456 } dict2 = { '

  • Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的形式传值. 2.约束函数的调用者必须用我们指定的Key名. def auth(*args,name,pwd): print(name,pwd) auth(pwd='213',name='egon') def register(name,age): print(type(name),type(age)

  • Python函数参数操作详解

    本文实例讲述了Python函数参数操作.分享给大家供大家参考,具体如下: 简述 在 Python 中,函数的定义非常简单,满足对应的语法格式要求即可.对于调用者来说,只需关注如何传递正确的参数,以及获取相应的返回值就足够了,无需了解函数的内部实现(除非想学习.跟踪源码). 话虽如此,但对于函数的定义来说,灵活性非常高.除了常规定义的必选参数以外,还支持默认参数.可变参数.以及关键字参数.这样以来,不但能处理复杂的参数,还可以简化调用者的代码. 形参和实参 不止 Python,几乎所有的编程语言都

  • Python计时相关操作详解【time,datetime】

    本文实例讲述了Python计时相关操作.分享给大家供大家参考,具体如下: 内容目录: 1. 时间戳 2. 当前时间 3. 时间差 4. python中时间日期格式化符号 5. 例子 一.时间戳 时间戳是自 1970 年 1 月 1 日(08:00:00 GMT)至当前时间的总秒数.它也被称为 Unix 时间戳(Unix Timestamp),它在unix.c的世界里随处可见:常见形态是浮点数,小数点后面是毫秒.两个时间戳相减就是时间间隔(单位:秒). 例: import time time1 =

  • Python列表常见操作详解(获取,增加,删除,修改,排序等)

    本文实例讲述了Python列表常见操作.分享给大家供大家参考,具体如下: 列表是由一系列按特定顺序排列的元素组成的对象.因为列表通常包含多个元素, 所以建议给列表指定一个表示复数的名称. 我们用方括号( [] ) 来表示列表, 并用逗号来分隔其中的元素. types=['娱乐','体育','科技'] print(types) 运行结果: ['娱乐', '体育', '科技'] 可以看到,打印列表的同时,也会将方括号打印出来. 1 获取元素 要获取列表中的某个元素, 在方括号内指定元素的索引即可:

  • Python 字典(Dictionary)操作详解

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型.一.创建字典字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: 复制代码 代码如下: dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} 也可如此创建字典: 复制代码 代码如下: dict1 = { 'abc': 456 };dict2 = { 'abc': 123, 98.6: 37 }; 注意:每个键与值用冒号隔开

随机推荐