Pandas基础操作

2023-11-09

Pandas基础

一、Series

Series讲解

from pandas import Series,DataFrame
import pandas as pd
obj = Series([1, -2, 3, -4])
#自动生产索引与之对应
type(obj)
#查看series类型
obj2 = Series([1, -2, 3, -4], index=['a', 'b', 'c', 'd'])
#生成数组,指定索引为a,b,c,d
obj2.values
#输出数组的值
obj2.index
#输出数组的索引
obj2[2]
#索引数组的第3个值
obj2[['c']]
#输出索引为c的值
obj2['c'] = 23
#改索引为c的值为23
obj2[obj2 < 0 ]
#输出所有小于0的数据
obj2 * 2
#给obj2数组所有数据×2
np.abs(obj2)
#用numpy的abs函数使数组所有数据绝对值
data = {
    '张三':92,
    '李四':78,
    '王五':68,
    '小明':82    
}
obj3 = Series(data)
#输出数组
obj4 = Series(data, index=names)
#按索引名输出数组
obj4.name = 'math'
obj4.index.name = 'students'
#确定数组名和索引名

二、DataFrame

import numpy as np
from pandas import Series,DataFrame
import pandas as pd
data = {
    'name':['张三', '李四', '王五', '小明'],
    'sex':['female', 'female', 'male', 'male'],
    'year':[2001, 2001, 2003, 2002],
    'city':['北京', '上海', '广州', '北京']
}
df = DataFrame(data)
#用DataFrame将数组转化为表格的形式
df = DataFrame(data, columns=['name', 'sex', 'year', 'city'])
#指定标签(列)值
df = DataFrame(data, columns=['name', 'sex', 'year', 'city'],index=['a', 'b', 'c', 'd'])
#指定索引值和标签值
'sex' in df.columns
#判断数据是否在标签中
'f' in df.index
#判断数据是否在索引中

三、索引值

obj = Series([1, -2, 3, -4], index=['b', 'a', 'c', 'd'])
#生成数组,设置索引值
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
#重新索引,若索引值无对象,则输出NaN
obj2 = obj.reindex(range(6),method='ffill')
#向前填充
df2 = df.reindex(['a', 'b', 'c', 'd'],fill_value=0.0)
#重新索引,并将缺失值改为0.0
df3 = df2.reset_index(drop=True)
#重置索引,不想保留原来的index,使用参数 drop=True,默认 False。
df2 = df.set_index('name')
#将DataFrame 中的列转化为行索引

四、索引和选取

loc和iloc函数讲解

obj[['a','c']]
#选取索引为a和c的值
obj['a':'c']
#选取索引从a到c的值
df[['city','sex']]
#选取标签为city和sex的数组数据
df2.loc['张三']
#选取标签为张三的数据
df2.iloc[1]
#选取索引为1的数据
df2[(df2['sex'] == 'female') & (df2['city'] == '北京')]
#交集

五、行和列的操作

map、apply、applymap函数讲解

Pandas的函数应用、层级索引、统计计算

new_data = {
    'city':'武汉',
    'name':'小李',
    'sex':'male',
    'year':2002
}
df = df.append(new_data,ignore_index=True) 
#新加入一行数据,忽略索引值
new_df = df.drop(2,axis=0)  
#删除行
new_df = new_df.drop('class',axis=1)  
#删除列
new_df.rename(index={3:2,4:3},columns={'math':'MATH'},inplace=True)  
#inplace可在原数据上修改
obj1.sort_index()    
#升序
obj1.sort_index(ascending=False)  
#降序
obj1.sort_values(ascending=False)
#按值降序排列
df2.sort_values(by='b',ascending=False)
#以列b的值来排列,降序排列
df.describe()
#输出数组基本统计量
obj.unique()
#返回数组的所有唯一值
obj.value_counts()
#输出每个值出现次数
obj = Series(np.random.randn(9),
            index=[['one','one','one','two','two','two','three','three','three'],
                  ['a','b','c','a','b','c','a','b','c']])
#2个索引,一个大索引、一个小索引
obj[:,'a']  
#内层选取
df = DataFrame(np.arange(16).reshape(4,4),
              index=[['one','one','two','two'],['a','b','a','b']],
              columns=[['apple','apple','orange','orange'],['red','green','red','green']])
#DataFrame格式化数组(2类索引的数组)
df.swaplevel(0,1)
#交换内层与外层索引
df.sum(level=0)
df.sum(level=1,axis=1)

六、pandas数据可视化

1.使用series绘制线性图

import numpy as np
from pandas import Series,DataFrame
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt  #导入matplotlib库
%matplotlib inline    #魔法函数
s = Series(np.random.normal(size=10),index=['a','b','c','d','e','f','g','h','i','j'])
s.plot()
plt.show()
#绘制线型图

2.使用DataFrame绘制线型图

df = DataFrame({'normal': np.random.normal(size=100), 
                       'gamma': np.random.gamma(1, size=100), 
                       'poisson': np.random.poisson(size=100)})
df.describe()
#输出基本统计量
df.plot()
plt.show()
df['sex'].value_counts()
df['sex'].value_counts().plot(kind='barh')

3.使用series绘制柱状图

from pandas import DataFrame,Series
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
fig,axes = plt.subplots(2,1)
df = pd.Series(np.random.rand(16),index = list('abcdefgijkpolikj'))
df.plot.bar(ax=axes[0],color='r',alpha=0.7)
#生成垂直柱状图
df.plot.barh(ax=axes[1],color='r',alpha=0.7)
#生成水平柱状图
plt.show()

4.使用DataFrame绘制柱状图

from pandas import DataFrame,Series
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.rand(4,4),index = ['one','two','three','four'],columns = pd.Index(['A','B','C','D'],name='bar'))
df.plot.bar()
plt.show()

5.使用DataFrame的hist方法生成直方图

import pandas as pd
from pandas import Series,DataFrame
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame({'a':np.random.randn(1000),'b':np.random.randn(1000),},columns=['a','b'])
df.plot.hist(bins=20)
#若加入stacked=true,则可以绘制叠加的直方图
plt.show()

七、pandas文件操作

data=pd.read_csv('05_Regression_5.2_logreg_credit_scores.csv',sep=';')
#读取csv文件
data=pd.read_table('iris.data',sep=',',header=None)
data.head(6)
#输出前6行数据
data.to_csv('iris.csv')
#保存为csv文件

八、pandas数据清洗与整理

1.数据清洗

df1 = DataFrame([[3,5,3],[1,6,np.nan],
                ['lili',np.nan,'pop'],[np.nan,'a','b']])
#生成四行三列的数组
df1.isnull()   
#对数组每个数组进行判定,出现True的为缺失值
df1.notnull()   
#False为缺失值
df1.isnull().sum()
#输出每列缺失值的数量
df1.isnull().sum().sum()
#输出数组缺失值的数量
df1.isnull().any()
#判断那些列存在缺失值
df1.isnull().values.any()
#判断是否每列都有缺失值。是返回True,反之返回False
df1.info()
#dataframe.info()函数用于获取 DataFrame 的简要摘要
df1.dropna()
#删除所有带有缺失值的行/列,返回一个新的数组,不影响原数组
df2.ix[2,:] = np.nan
#第3行的数据全部改为缺失值
df2[3] = np.nan
#第3列的数据全部改为缺失值
df2.dropna(how='all')
#删除所有带有缺失值的行
df2.dropna(how='all',axis=1)
#删除所有带有缺失值的列
df2.fillna(0)
#填充所有缺失值为0,返回新数组,不改变原数组
df2.fillna({0:1,1:6,2:9,3:11})
#将第1列的缺失值填充为1,第2列的缺失值填充为6,第3列的缺失值填充为9,第4列的缺失值填充为11
df2.fillna({1:6,3:0},inplace=True)
#参数inplace意思为改动原数组,默认为False
df2.fillna(method='ffill')
#向下填充,返回新数组,不改变原数组
df2[0] = df2[0].fillna(df2[0].mean())
#第一列的平均值填充(计算平均数时不包括那个缺失的数据)

2.重复数据

duplicated,drop_duplicates函数讲解

data = {
    'name':['张三', '李四', '张三', '小明'],
    'sex':['female', 'male', 'female', 'male'],
    'year':[2001, 2002, 2001, 2002],
    'city':['北京', '上海', '北京', '北京']
}
df1 = DataFrame(data)
df1.duplicated()
#判断每一行是否有重复数据
df1.drop_duplicates(inplace=True)
#删除重复值,改变原数组
df1.drop_duplicates(['sex','year'])
#删除sex列和year列相同的数组数据
df1.drop_duplicates(['sex','year'],keep='last')#keep为保留最后一次出现的重复数据

3.替换值

data = {
    'name':['张三', '李四', '王五', '小明'],
    'sex':['female', 'male', '', 'male'],
    'year':[2001, 2003, 2001, 2002],
    'city':['北京', '上海', '', '北京']
}
df1 = DataFrame(data)
df1.replace(['',2001],['不详',2002])
#将空数据替换为不详,将2001替换为2001
df1.replace({'':'不详',2001:2002})
#作用与上同
def f(x):
    if x >= 90:
        return '优秀'
    elif 70<=x<90:
        return '良好'
    elif 60<=x<70:
        return '合格'
    else:
        return '不合格'
df2['class'] = df2['math'].map(f)
#map()将一个自定义函数应用于Series结构中的每个元素.对应此句代码,即是针对数组math列中的每个元素
del df2['class']
#删除者一列元素
df2['class'] = df2['math'].apply(f)
#apply()将一个函数作用于DataFrame中的每个行或者列

4.虚拟变量

pandas的get_dummies函数讲解

df = DataFrame({
    '朝向':['东','南','东','西','北'],
    '价格':[1200,2100,2300,2900,1400]
})
# 哑变量(0,1)转化One-Hot编码
pd.get_dummies(df['朝向']) 
#转换变量,有的数据显示1,没有的数据显示0

5.数据合并和重塑

merge函数讲解

price = DataFrame({
    'fruit':['apple','banana','orange'],
    'price':[23,32,45]
})
amount = DataFrame({
    'fruit':['apple','banana','apple','apple','banana','pear'],
    'amount':[5,3,6,3,5,7]
})
pd.merge(amount,price,on='fruit')
#合并这2个数组,

concat函数讲解

s1 = Series([0,1],index=['a','b'])
s2 = Series([2,3],index=['c','d'])
s3 = Series([4,5],index=['e','f'])
pd.concat([s1,s2,s3])
#concat函数连接

6.数据重塑

stack和unstack函数讲解

result = df.stack()
result.unstack()

八、综合案例——小费数据集

import numpy as np
from pandas import Series,DataFrame
import pandas as pd
import seaborn as sns   #导入seaborn库
tips=sns.load_dataset('tips')
tips.head()
tips.shape
tips.describe()
tips.info()
tips.plot(kind='scatter',x='total_bill',y='tip')
male_tip = tips[tips['sex'] == 'Male']['tip'].mean()
female_tip = tips[tips['sex'] == 'Female']['tip'].mean()
s = Series([male_tip,female_tip],index=['male','female'])
s.plot(kind='bar')
tips['day'].unique()
sun_tip = tips[tips['day'] == 'Sun']['tip'].mean()
sat_tip = tips[tips['day'] == 'Sat']['tip'].mean()
thur_tip = tips[tips['day'] == 'Thur']['tip'].mean()
fri_tip = tips[tips['day'] == 'Fri']['tip'].mean()
s = Series([thur_tip,fri_tip,sat_tip,sun_tip],index=['Thur','Fri','Sat','Sun'])
s.plot(kind='bar')
tips['percent_tip'] = tips['tip']/(tips['total_bill']+tips['tip'])
tips.head(10)
tips['percent_tip'].hist(bins=50)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas基础操作 的相关文章

随机推荐

  • SPARK安装

    首先是结论 最终我没能在win10上运行起来spark 官方给的quickstart http spark apache org docs latest api python getting started quickstart html
  • Matlab学习1.0

    1 Matlab通用命令 1 常用命令 cd 显示 or改变当前文件夹 dir 显示当前文件夹下的文件 clc 清空工作窗中显示的内容 load 加载指定文件的变量 diary 日志文件命令 调用DOS命令 home 光标移动到窗口最左上角
  • 网络安全知识库

    0x00 前言 本篇用来整理所有的零散的知识 作为一个技能树或者技能表来进行引导 CTF 加解密合集 CTF Web合集 0x01 Http 1 http头 1 1 本地访问识别 如何伪造http头 让后端认为是本地访问 0x02 Web
  • Python爬虫反反爬:CSS反爬加密彻底破解!

    刚开始搞爬虫的时候听到有人说爬虫是一场攻坚战 听的时候也没感觉到特别 但是经过了一段时间的练习之后 深以为然 每个网站不一样 每次爬取都是重新开始 所以 爬之前谁都不敢说会有什么结果 前两天 应几个小朋友的邀请 动心思玩了一下大众点评的数据
  • css动画效果之transition(动画过渡效果属性)

  • pandas dataframe 读取 xlsx 文件

    refer to https medium com kasiarachuta reading and writingexcel files in python pandas 8f0da449cc48 dframe pd read excel
  • github代码推送总是失败

    github代码推送问题 因为github仓库代码的推送总是失败 所以改了一个方案采用ssh的方式来进行代码的推送 并记录操作步骤 方案 https方式换成ssh方式 git ssh 生成 假如已经生成的话 可以略过此步骤 ssh keyg
  • Android启动service的方法

    在 Android 中启动 service 的方法如下 创建 service 的类 并在 AndroidManifest xml 文件中注册该 service 使用 Intent 类来启动 service 例如 Intent intent
  • [转]公司管理混乱,从哪里入手?

    案例分析 我们是一个40人左右的小公司 规模虽小 但管理起来感觉力不从心 经常碰到工人抵抗 情绪化 上班迟到 旷工 不服从管理 即使勉强接受 也不会用心去做 草草应付了事 每次都提议是否弄个规章制度 但也是白纸一张 到了月底 实施不了 因为
  • 使用OpenGL 立方体贴图

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 OpenGL 立方体贴图 二 使用步骤 1 代码 2 着色器程序 运行结果 注意 源码下载 参考 前言 对于室外3D 场景 通常可以通过在地平线上创造一些逼真的效果 来
  • SpringBoot利用AOP写一个日志管理(Log)

    1 需求 目前有这么个问题 有两个系统CSP和OMS 这俩系统共用的是同一套日志操作 Log 目前想区分下这俩系统的日志操作 那没办法了 只能重写一份Log的日志操作 你也可以参照若依框架的日志系统实现 2 新建一张日志表 sys oper
  • libevent学习篇之一:libevent快速入门

    https www jianshu com p 8ea60a8d3abb LibEvent快速入门 简介 基本的socket变成是阻塞 同步的 每个操作除非已经完成 出错 或者超时才会返回 这样对于每一个请求 要使用一个线程或者单独的进程去
  • 岁月划过生命线(16.02 ~ 10 -提前转正)

    岁月划过生命线 16 02 10 提前转正 标签 coder 10月9号收到了提前转正通知后就想写些总结 总结在微店的一年里见过的人 读过的书 做过的事儿 不然怕很多有意思的细节以后都忘了 但一直找借口迟迟懒得动笔 这篇总结断断续续竟写了一
  • Linux驱动入门必须get的知识点-01.基本框架与操作

    0 编写编译驱动的Makefile 指定驱动的测试的路径 ROOM DIR nfs rootfs home 2 study 指定测试Demo的交叉编译工具链 DEMO DIR home linux 1 DataShare 0 交叉编译工具链
  • Mybatis-Plus代码生成器快速上手示例

    Mybatis Plus代码生成器 实验脚本 Table structure for parent list DROP TABLE IF EXISTS parent list CREATE TABLE parent list p id in
  • Audacity如何改变音频节奏?Audacity调整音频节奏方法

    很多人在录完音频后都会试听效果 经常会发现音频的节奏要么太快 要么太慢 可是自己又不愿意花时间 花人力 物力再去录制音频 为了解决这问题 我们可以用Audacity改变音频的节奏 加快或者减慢某个音频片段或者整个音频的节奏 只是很多人不懂怎
  • Windows 11 & Server 2022 HLK kit WHQL认证注意事项

    微软已经发布Windows 11 Server2022 HLK WHQL 测试套装 针对这一版HLK 有一个地方十分值得注意 在创建Porject的时候会出现 is windows driver Project 选择框 这一选项目前是用于工
  • (小米系统系列一)小米/红米BL解锁,解BL锁方法(亲测可用)

    文章参考自原作者 原作者链接 https www bilibili com read cv3305336 https www xiaomi cn post 17982230 http www miui com unlock download
  • Java Eclipse如何调试代码

    下面通过一个简单的例子来了解一下 Eclipse 调试程序的方法 public class Test1 public static void main String args for循环 如果for后面 内的条件一直成立 内的代码一直执行
  • Pandas基础操作

    Pandas基础 文章目录 Pandas基础 一 Series 二 DataFrame 三 索引值 四 索引和选取 loc和iloc函数讲解 五 行和列的操作 map apply applymap函数讲解 Pandas的函数应用 层级索引