pandas官方用户手册网站

一、调用pandas

  • import pandas:导入pandas包,后续代码就可以使用pandas包里定义好的功能了。
  • import pandas as pd:
    相当于将pandas包重命名为pd,这样之后使用pandas包的功能的时候,直接写pd,而不需要写pandas,更省事。

二、打开和保存文件

(一)打开文件

1. 打开excel、csv文件
  • pd.read_csv(filepath)
import pandas as pdfilepath = 'E:\\python\\test.csv'
df = pd.read_csv(filepath)
  • pd.read_excel(filepath)
import pandas as pdfilepath = 'E:\\python\\test.xlsx'
df = pd.read_excel(filepath)
2. 打开json文件
  • json.load
import json
with open ('filename.json','r') as openfile:json_object = json.load(openfile)
3. 打开XML文件

python没有专门的包可以直接打开xml文件,可以parse

import pandas as pd
import xml.etree.ElementTree as etree
tree = etree.parse('filexmaple.xml')
root = tree.getroot()
columns = ['name', 'age', 'birthday']
df = pd.DataFrame(columns = columns)
for node in root:name = node.find('name').textage = node.find('age').textbday = node.fine('birthday').text

可以在打开文件的时候,将第一行设置为header(即列名称)。或者可以手动添加header

  • 设置第一行:df = pd.read_xlsx(filepath, header = 0)
  • 手动添加:df.columns = [‘name’, ‘class’, ‘age’]

(二)保存文件

  • df.to_csv(filepath&name)
    将文件保存为csv格式,注意不要忘记写后缀
    如果参数index = False,表示行名称不会被保存.
df.to_csv('new_file.csv')
df.to_csv('E:\\python\\new_file.csv')
  • 其他文件格式的打开和保存
Data Formate Read Save
csv pd.read_csv() df.to_csv()
json pd.read_json() df.to_json()
excel pd.read_excel() df.to_excel()
hdf pd.read_hdf() df.to_hdf()
sql pd.read_sql() df.to_sql()

三、初查和清理数据

(一)初查数据

  • df.head(): 展示前五行数据
  • df.tail(): 展示后五行数据
  • df.info(): 展示df的基本信息,包括列名及数据类型、每列非Na数据的计数、内存使用等。
  • df[‘name’].unique(): 剔除该列数据的重复项。
  • df.describe(): 展示数据类型为数字(int, float)的列数据的统计信息,比如计数、平均值、最大值、最小值、方差等;
  • df.describe(include = ‘all’)用于展示所有列数据(包括非数据类型的列数据)的统计信息,对于非数字类型的列数据,平均值、最大值、最小值等返回NaN。
  • df.dtypes: 查看各列数据的数据类型
  • df[‘column_name’].value_counts(): 查看该列中各值出现的次数。
  • df[‘column_name’].value_counts().idxmax():查看该列中数值出现最高的。
df['door_num'].value_counts()
#结果
#four    114
#two      89
#Name: num-of-doors, dtype: int64
df['door_num'].value_counts().idxmax()
#结果
#'four'

(二)清理数据

  • 修改index列:将df的index修改为df中的’Date’列

    • df.index = df[[‘Date’]]
    • df.set_index('Date)
  • 重置index列:df.reset_index(),将index重置为以0开头的整数
    reset_index功能里有inplace参数,inplace=True会在数据里增加一列index(如下图)


inplace=False,不会在数据里增加一列index(如下图)

  • df.columns = [“symboling”,“normalized-losses”,“make”] :添加列名称
  • df.rename(columns = {‘old-name’:‘new-name’}, inplace = True):修改列名称,将old-name修改为new-name
  • df.replace(missing_value, new_value):
    df1 = df.replace(’?’,np.NaN) :将数值为“?”的单元格替换为NaN,替换后的新dataframe返回给df1。该功能搭配.dropna()可用于删除缺失数据。
  • df1.dropna(subset=[“price”], axis=0, inplace = True) ,将price列中数值为NaN单元格所在行的数据整行删除。 如果axis = 1,表示删除NaN数值所在列(即price列)。inplace = True代表对df本身改动,inplace = False代表生成新的df
#删除na数据所在行,inplace=True
df1.dropna(subset=["price"], axis=0, inplace = True)
#删除na数据所在行,inplace=False
df = df1.dropna(subset=["price"], axis=0, inplace = False)
#因为删除了na列,所以重置index列
df.reset_index()
  • df.astype(): 修改数据类型。
#price列的数据类型修改为int。
df['price'] = df['price'].astype(int)
#或者也可以
df[['price']] = df[['price']].astype(int)
#修改bore和stroke两列的数据类型
df[["bore", "stroke"]] = df[["bore", "stroke"]].astype("float")

示例1 - 将列名为stroke列中的缺失数据替换成该列的平均值

#由于不确定该列数据的数据类型是否为数字,所以先将该列数据的数据类型修改为float
avg_stroke = df['stroke'].astype('float').mean(axis = 0)
#print(avg_stroke)
df['stroke'].replace(np.nan, avg_stroke, inplace = True)

(三)数据标准化和标注

1、simple scaling

将不同范围大小的数据进行标准化,使其范围控制住0-1之间,从而使不同范围的数据具有可比性。常见方法是用原数据除以该列数据的最大值,即用 (原数据)/(数据最大值)替换原数据

# 用(original value)/(maximum value)替换original value
df['length'] = df['length']/df['length'].max()
df['width'] = df['width']/df['width'].max()
2、数据分组

将连续数据按照一定规则进行分组,使原连续数据离散。

  • 使用numpy的函数np.linspace(start_value, end_value, numbers_generated),设定范围和组数
  • group_names = [‘Low’, ‘Medium’, ‘High’]创建各组名称
  • 利用pandas里的cut函数,将列中的数值划分至设定好的组别中。
#将horsepower列分成3组,以最小值开始,以最大值结束,分三组,所以需要4个切割点)
bins = np.linspace(min(df["horsepower"]), max(df["horsepower"]), 4)
bins
#结果:创建的3个组别的边界值
#array([ 48.        , 119.33333333, 190.66666667, 262.        ])group_names = ['Low', 'Medium', 'High']
df['horsepower-binned'] = pd.cut(df['horsepower'], bins, labels=group_names, include_lowest=True )
df[['horsepower','horsepower-binned']].head(5)

运行结果

horsepower horsepower-binned
0 111 Low
1 111 Low
2 154 Medium
3 102 Low
4 115 Low
3. indicator variable(也称为dummy variable)

An indicator variable (or dummy variable) 是一种用数值对变量进行标注的方式(例如:在员工统计中将男性标为1,女性标为0)。这种方法被称为“dummy”,是因为用于标注的数据与数值本身的含义没有关系。这种数据标注方法常用于回归分析。

函数 pd.get_dummies(需要打标的列)

df['fuel-type'].value_counts()
#结果:fuel-type列有两个值gas和diesel
#gas       181
#diesel     20
#Name: fuel-type, dtype: int64#对fuel-type列进行标注,即

四、创建DataFrame

  • 将字典变成DataFrame结构:key是列名,value是每列数值 python student = {'name': ['Eva', 'Bob', 'John','Cathy', 'Kate'], 'age': ['15', '16', '15','17','16'], 'gender': ['f', 'm', 'f', 'f', 'm']} student_df = pd.DataFrame(student)

五、常用方法

(一)从DataFrame结构的数据中选取一列数据

  1. 直接选取,Series格式:df[‘列名’] (注意:是一个方括号)

    1. 按dataframe格式:df[[‘列名’]] (注意:是两个方括号)

(二)从DataFrame结构的数据中选取多列数据

格式:df[[‘列名1’,‘列名2’,‘列名3’]] ,注意是两个方括号

如果只有一个方括号会报错

(三)获取第n行、第m列单元格的数值

  1. 用数字定位:df.iloc[n,m]
    注意:标题列不算行数,行数据和列数据的序号n、m均从0开始,所以获取第一行、第一列单元格数据时,应该是df.iloc[0,0]

2)用列名定位获取数据
获取第二行中’Artist‘列的数据(注意,此处的第二行是指实际数据的第二行,而其行序号为1),如图

(四)获取多行多列数据(数据切片)

  1. 用序号:df.iloc[i:j, n:m]
    例如获取第1到2行、1到3列的数据,如下图:

    上图获取的数据在整个数据表中的位置如下图:

  1. 用列名: df.loc[i:j, ‘列名’:‘列名’]

.loc与.iloc对行数据切片的不同之处,需特别注意!! df.loc[i:j]是获取行序号从第i行到第j行;而在使用df.iloc[i:j]时获取第i行到第j-1行数据。

如下图,df.loc[0:2, :]获取了前三行数据,而上面df.iloc[0:2,:]获取了前两行数据。

(三)选择列数据满足特定要求的行数据

df1 = df[df[‘gender’] = ‘f’]: 满足条件的返回True, 反之返回False; 为True的行被选中,为False的行被剔除。 df2 = df[df[‘age’]>16]

(四)选择满足特定值的行数据

可以对特定的列:选择A列中包含任一数值’1’,‘2’,'3’的行,df[df[‘A’].isin([‘1’,‘2’,‘3’])]
也可以对整个dataframe:df.isin([‘1’,‘2’,‘3’])
可以对多列进行筛选:df[df[某列].isin(条件)&df[某列].isin(条件)]

python进阶--pandas基本功能相关推荐

  1. 【Python进阶】Python进阶专栏、编程与开源框架知识星球上线,等你来follow

    大家好,今天我将在有三AI开设新专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Sc ...

  2. python进阶指南_Python特性工程动手指南

    python进阶指南 介绍 (Introduction) In this guide, I will walk through how to utilize data manipulating to ...

  3. 【视频课】10大真实金融量化交易案例,20多小时Python进阶课!

    Python是金融行业的重要工具,本次我们联合<王的机器>公众号号主一起推出Python金融案例进阶课程,并且基于10大金融行业的实际案例进行实践,下面请听介绍. 作者介绍 首先来介绍一下 ...

  4. Python 进阶之路 (九) 再立Flag, 社区最全的itertools深度解析(上)

    前言 大家好,今天想和大家分享一下我的itertools学习体验及心得,itertools是一个Python的自带库,内含多种非常实用的方法,我简单学习了一下,发现可以大大提升工作效率,在sf社区内没 ...

  5. Python 进阶_生成器 生成器表达式

    目录 目录 相关知识点 生成器 生成器 fab 的执行过程 生成器和迭代器的区别 生成器的优势 加强的生成器特性 生成器表达式 生成器表达式样例 小结 相关知识点 Python 进阶_迭代器 & ...

  6. python可以实现哪些功能_Python学习究竟有多强大,Python代码能实现哪些功能

    Python究竟有多强大?Python代码能实现哪些功能?众所周知,Python入门简单.功能强大,是人工智能时代最佳的编程语言.但很多人好奇Python究竟有多强大,为什么那么受欢迎?下面就来给大家 ...

  7. Python 进阶之路 (十二) 尾声即是开始

    Python进阶之路总结 大家好,我的<< Python进阶之路>>到这一期就到此为止了,和 <<Python 基础起步>>不同,在掌握了一些基础知识后 ...

  8. 【Python】Pandas基础:结构化数据处理

    python:Pandas基础:结构化数据处理 目录: 文章目录 @[toc] 一 pandas及其重要性 二 pandas的数据结构介绍 1 Series 2 DataFrame 3 索引对象 三 ...

  9. Python之Pandas:pandas.read_csv()函数的简介、具体案例、使用方法详细攻略

    Python之Pandas:pandas.read_csv()函数的简介.具体案例.使用方法详细攻略 目录 read_csv()函数的简介 read_csv()函数的简介               ...

最新文章

  1. 12 求1+2+...+n
  2. OpenGL第三方库:GLFW入门篇
  3. 51 java_51javacms
  4. java 反编译 类名_java javassist创建类和反编译类
  5. MFC程序打开文件对话框出错的问题解决
  6. 设计模式 过滤器模式
  7. centos 7上创建samba服务器
  8. table表框去掉相邻的间隔
  9. 博客随笔《文章目录——java》大纲
  10. 传奇HERO引擎给装备加套装属性技巧
  11. 工程测量(地形图测量)
  12. 决定要收藏,让你白嫖阿里矢量图(iconfont矢量图使用)
  13. 用递归法打印九九乘法表c语言,java递归打印九九乘法表
  14. iterm2 + oh my zsh 实现 macOS X 下炫酷终端
  15. 特殊的数独身数,:水仙花数, 四叶玫瑰数, 五角星数, 六合数 ,北斗七星数, 八仙数, 九九重阳数 ,十全十美数...
  16. Kafka操作之kafka-topics
  17. 某考试系统逻辑漏洞打包#可改题改分数#查看大量信息
  18. Nova Suspend 和 Pause
  19. 如何区分 LDAP 协议和 SAML 协议?
  20. 运算符和数据类型转换

热门文章

  1. 计算机技术职称自我评价,网络工程师的自我评价
  2. RGB取反,渐变色计算
  3. 传奇服务器列表文档,转来的 ,给新手看看 ,绝对实用、传奇服务端的构成及各个文件的作用...
  4. Codeforces Round #703 (Div. 2) A-E 题解
  5. 花裤衩-nx-admin好多轮子-动态路由
  6. 基金投资组合中的夏普率
  7. SRAM/DRAM优缺点对比
  8. 马云最新演讲:真正的强者,是在最孤立无援的时刻,依然坚持到底
  9. 英国《金融时报》| 国际象棋组织宣布通过Algorand进行“混合IPO”计划(Hybrid IPO)
  10. apicloud安卓更新,新版本不能覆盖旧版本的问题及解决方案