首页 > 其他分享 >pandas

pandas

时间:2023-05-22 14:12:49浏览次数:65  
标签:index df Series 索引 pd print pandas

转载于: http://c.biancheng.net/pandas/

pandas主要特点

提供一个简单、高效、带有默认标签(也可以自定义标签)的DataFrame对象;

能够快速得从不同格式的文件中加载数据(如:Excel、CSV、SQL文件),然后将其转换为可处理的对象;

能够按照数据的行、列标签进行分组,并对分组后的对象执行聚合和转换操作;

能够很方便地实现数据归一化操作和缺失值处理;

能够很方便地对DataFrame的数据列进行增加、修改、或者删除的操作;

能够处理不同格式的数据集,比如:矩阵数据、异构数据表、时间序列等;

提供了多种处理数据集的方式,如:构建子集、切片、过滤、分组等;

pandas主要优势

DataFrame和Series构建了适应于数据分析的存储结构;

简洁的API;

实现与其他库的集成,如:Matplotlib、scikit-learn等

pandas内置数据结构

在ndarray数据(numpy中的数组)的基础上构建了两种不同的数据结构:

Series(一维数据结构):带列标签,可以理解为索引,不局限于整数,也可以是字符类型。

DataFrame(二维数据结构):一种表格型数据结构,它既有行标签,也有列标签。

 

1. Series

Series结构,也称Series序列,由一组数据值(value)和一组标签组成,其中标签与数据值之间是一一对应关系。

 

1.1 创建Series对象

df=pd.Series( data, index, dtype, copy)

参数:

1.1.1 ndarray创建Series对象

ndarray 是 NumPy 中的数组类型,当 data 是 ndarry 时,传递的索引必须具有与数组相同的长度。假如没有给 index 参数传参(这种设置方式称为“隐式索引”),在默认情况下,索引值将使用是 range(n) 生成,其中 n 代表数组长度。

例:使用“显示索引”

import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
#自定义索引标签(即显示索引)
s = pd.Series(data,index=[100,101,102,103])
s

 

1.1.2 dict(字典)创建Series对象

把dict作为输入数据,如果没有传入索引时会按照字典的键来构造索引,反之,当传递了索引时需要将索引标签与字典中的值一一对应。

例一:没有传索引时

data = {"a": 1, "b":2, "c":3}
s = pd.Series(data)
print(s)

 例二:未index参数传递索引时

data = {"a": 1, "b":2, "c":3}
s = pd.Series(data,index=['b','c','d','a'])
print(s)

注:当传递的索引值无法找到对应的值时,使用NaN(非数字)填充。

1.1.3 标量创建Series对象

如果data是标量值,则必须提供索引。

s = pd.Series(5, index=[0, 1, 2, 3])
print(s)

注:标量值按照index的数量进行重复,并一一对应。

 

1.2 访问Series数据

1.2.1 位置索引访问/索引标签访问

这种访问方式与 ndarray 和 list 相同,使用元素自身的下标进行访问。我们知道数组的索引计数从 0 开始,这表示第一个元素存储在第 0 个索引位置上,以此类推,就可以获得 Series 序列中的每个元素。

s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s[0])  #位置访问
print(s['a']) #标签访问

通过切片的方式访问Series序列中的数据:

s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s[:3])

 

1.3 Series常用属性

s = pd.Series(np.random.randn(5))
print(s)
# 
print("---------axes---------")
print(s.axes)
print("---------dtype---------")
print(s.dtype)
# 返回一个布尔值,用于判断数据对象是否为空
print("---------empty---------")
print("是否为空对象?")
print (s.empty)
# 查看序列的维数。根据定义,Series 是一维数据结构,因此它始终返回 1
print("---------ndim---------")
print (s.ndim)
# 返回 Series 对象的大小(长度)
print("---------size---------")
print(s.size)
# 以数组的形式返回 Series 对象中的数据
print("---------values---------")
print(s.values)
# 该属性用来查看 Series 中索引的取值范围
print("---------index---------")
s=pd.Series([1,2,5,8],index=['a','b','c','d'])
print(s.index)
#隐式索引
s1=pd.Series([1,2,5,8])
print(s1.index)

 

2. DataFrame

2.1 DataFrame结构

一个表格型的数据结构,有行标签(index),又有列标签(columns),它也被称异构数据表,异构指的是表格中每列的数据类型可以不同比如可以使字符串、整型、浮点型等。

 

 

 

2.2 创建DataFrame对象

语法:

import pandas as pd
pd.DataFrame( data, index, columns, dtype, copy) 

参数:

 

2.2.1 列表创建DataFrame对象

可以使用单一列表或嵌套列表创建一个DataFrame

例一:单一列表创建

data = [1,2,3,4,5]
df = pd.DataFrame(data)
print(df)

例二:使用嵌套列表创建

data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
print(df)

2.2.2 字典嵌套列表创建

data字典中,键对应的值的元素长度必须相同(也就是列表长度相同)。如果传递了索引,那么索引的长度应该等于数组的长度;如果没有传递索引,那么默认情况下,索引将是range(n),其中n代表数组长度。

data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
print(df)

2.2.3 列表嵌套字段创建DataFrame对象

列表嵌套字典可以作为输入数据传递给DataFrame构造函数。默认情况下,字典的键被用作列名。

data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print(df)

 

2.3 列索引操作DataFrame

可以使用列索引(columns index)引来完成数据的选取、添加和删除操作。

2.3.1 列索引添加数据列

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
# 使用df['列']=值,插入新的数据列
df['three']=pd.Series([10,20,30],index=['a', 'b', 'c'])
print(df)
# 将已经存在的数据列做相加运算
df['four']=df['one'] + df['three']
print(df)

除了使用df[]=value的方式外,还可以使用insert()方法插入新的列:

info=[['Jack',18],['Helen',19],['John',17]]
df=pd.DataFrame(info,columns=['name','age'])
print(df)
#注意是column参数
#数值1代表插入到columns列表的索引位置
df.insert(1, column='score',value=[11,22,33])
print(df)

2.3.2 列索引删除数据列

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']),
   'three' : pd.Series([10,20,30], index=['a','b','c'])}
df = pd.DataFrame(d)
print(df)
# 使用del删除
del df['one']
print(df)
# 使用pop方法删除
df.pop('two')
print(df)

2.3.3 行索引操作DataFrame

1. 标签索引选取

可以将行标签传递给 loc 函数,来选取数据。

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df.loc['b'])

注意:loc 允许接两个参数分别是行和列,参数之间需要使用“逗号”隔开,但该函数只能接收标签索引。

 

2. 整数索引选取

通过将数据行所在的索引位置传递给 iloc 函数,也可以实现数据行选取。

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print (df.iloc[2])

注意:iloc 允许接受两个参数分别是行和列,参数之间使用“逗号”隔开,但该函数只能接收整数索引。

 

3. 切片操作多行选取

可以使用切片的方式同时选取多行。

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
#左闭右开
print(df[2:4])

4. 添加数据行

使用 append() 函数,可以将新的数据行添加到 DataFrame 中,该函数会在行末追加数据行。

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
#在行末追加新数据行
df = df.append(df2)
print(df)

5. 删除数据行

可以使用行索引标签,从 DataFrame 中删除某一行数据。如果索引标签存在重复,那么它们将被一起删除。

 

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2)
print(df)
#注意此处调用了drop()方法
df = df.drop(0)
print (df)

默认使用 range(2) 生成了行索引,并通过 drop(0) 同时删除了两行数据。

 

2.4 常用属性和方法汇总

 

2.5 pandas描述性统计

 

2.6 pandas csv读取文件

文件的读写操作属于计算机的IO操作,pandas IO操作提供了一些读取器函数,比如 pd.read_csv()、pd.read_json 等,它们都返回一个 Pandas 对象。

语法:

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',names=None, index_col=None, usecols=None)

 

# 指定一个列,然后使用index_col可以实现自定义所以
df=pd.read_csv("C:/text.csv",index_col=['ID'])
# 转换salary字段为float类型
df=pd.read_csv("C:/text.csv",dtype={'salary':np.float64})
# 自定义文件标头名,但是原来的标头名(列标签名)并没有被删除,此时可以使用header参数来删除它。
df=pd.read_csv("C:/text.csv",names=['a','b','c','d','e'],header=0)
# 跳过指定的行号,注:标头也算是一行
df=pd.read_csv("C:/text.csv",skiprows=2)

 

标签:index,df,Series,索引,pd,print,pandas
From: https://www.cnblogs.com/xiao-wang-tong-xue/p/17412606.html

相关文章

  • Pandas 03 DataFrame
    PandasDataFrameInitsignature:pd.DataFrame(data=None,index:'Optional[Axes]'=None,columns:'Optional[Axes]'=None,dtype:'Optional[Dtype]'=None,copy:'bool'=False,)Docstring:......
  • Pandas 03 使用
    Pandas的使用典型的数据分析流程是采集、整理清洗、处理(分组、排序、计算),然后按照分析目的产出最终数据,最后进行可视化,得出结论。一、Pandas读取和导出格式文件格式读取函数写入(输出)函数binaryExcelread_excelto_exceltextCSVread_csvread_tabletextJSONread_jsonto_jsontext网页......
  • Pandas 01 快速入门
    Pandas官方文档Pandas(/ˈpændəz/)是一个开源的、BSD许可的库,为Python编程语言提供高性能、易于使用的数据结构和数据分析工具。Pandas适合处理一个规正的二维数据,即有N行N列,类似于SQL执行后产出的,或者无合并单元格Excel表格。一、快速入门1、读取数据importpandasa......
  • python -- pandas常见的一些行、列操作方法(感兴趣的,可以跟着一起练练手)
     这篇文章分享一下pandas常见的一些行、列操作方法,比较基础,感兴趣的童鞋可以看看。 首先,我们用“random.seed(inti)” 生成一组测试数据。对于random.seed()有兴趣进一步了解的,可以前往阅读 python--numpy.random.seed() 如果“pipinstallpandas”遇到问题,可参考......
  • 二.使用pandas.Resample函数转换日K为周K
    fromjqdatasdkimport*importpandasaspdimporttimeauth('193340***','****')#账号是申请时所填写的手机号;密码为聚宽官网登录密码stocks=list(get_all_securities(['stock']).index)#forstock_codeinstocks:#print("正在股票所有数据:"+......
  • 【pandas基础】--数据拆分与合并
    数据集拆分是将一个大型的数据集拆分为多个较小的数据集,可以让数据更加清晰易懂,也方便对单个数据集进行分析和处理。同时,分开的数据集也可以分别应用不同的数据分析方法进行处理,更加高效和专业。数据集合并则是将多个数据集合并成一个大的数据集,可以提供更全面的信息,也可以进行......
  • Pandas GroupBy 使用教程
    实例1将分组后的字符拼接importpandasaspddf=pd.DataFrame({'user_id':[1,2,1,3,3],'content_id':[1,1,2,2,2],'tag':['cool','nice','clever','clever','not-bad']})df将d......
  • 通俗易懂!像使用SQL一样使用Pandas进行数据筛选等复杂操作
    相对于学习Pandas各种数据筛选操作,SQL语法显得更加简洁清晰,若能够将SQL语法与Pandas中对应的函数的使用方法关联起来,对于我们应用Pandas进行数据筛选来讲无疑是一个福音。本文通过Pandas实现SQL语法中条件过滤、排序、关联、合并、更新、删除等简单及复杂操作,使得我们对方法的理......
  • Python数据离散化指南:手写if-elif语句与pandas中cut()方法的实现
    当我们进行数据分析时,有时候需要对数值型数据进行离散化,将其划分为不同的标签或类别。这样做可以方便我们进行统计和分析,并帮助我们更好地理解数据。在本文中,我们将介绍两种常见的离散化方法,并提供实现代码。方法一:使用条件语句第一种方法是使用条件语句来显式地检查输入值x......
  • pandas日期类型汇总
    pandas日期类型汇总时间序列数据的特点是有规律地随着时间变化而变化,它们的变化趋势可以被分析和预测。时间序列分析是一种用于预测未来值或评估过去值的统计方法,常常被用于预测未来趋势、季节性变化、周期性变化、随机波动等。1.日期类型原始数据中,日期一般会存储为各种类型字......