首页 > 其他分享 >pandas-基础数据结构

pandas-基础数据结构

时间:2023-08-12 13:35:16浏览次数:36  
标签:index df Series 基础 索引 pd print 数据结构 pandas

pandas-基础数据结构

目录

数据结构

Pandas 的主要数据结构是 Series(一维数据)与DataFrame(二维数据)

⽆论是numpy中的NAN还是Python中的None在pandas中都以缺失数据NaN对待

Series

Series是一种类似于以为NumPy数组的对象,它由一组数据(各种NumPy数据类型)和与之相关的一组数据标签(即索引)组成的。可以用index和values分别规定索引和值

pd.Series( data, index, dtype, name, copy)
  • data: 一组数据(list,array,dict)。

  • index数据索引标签,如果不指定,默认从 0 开始。

  • dtype:数据类型,默认会自己判断。

  • name:设置名称。

创建Series

第一种 list

obj = pd.Series([4, 7, -5, 3, 7, np.nan])
print(obj)

#0    4.0
#1    7.0
...
#5    NaN
#dtype: float64

第二种 array

# array
arr = np.arange(6)
s = pd.Series(arr)
print(s)

#0    0
#1    1
...
#5    5
#dtype: int32

第三种 dict

# dict
d = {'a':10,'b':20,'c':30,'d':40,'e':50}
s2 = pd.Series(d)
print(s2)

#a    10
#b    20
#c    30
#d    40
#e    50
#dtype: int64

# 指定⾏索引
s2 = pd.Series(0,index = list('abcdefhi'),dtype='int64') 
#a    0
#b    0
...
#i    0
#dtype: int64

常用操作

因为pandas是基于numpy的,所以有numpy的很多特性,Series和numpy很多类似

函数属性 描述
.name() .rename(new_name) 名称,重命名
.head(n) .tail(n) 头几个数据,尾几个数据,默认5条n可选
.index 查看索引,没有括号
.loc[] 以标签为索引
.iloc[] 一下标为索引
.reindex() 重新对索引进行标签
.sort_values() 按值排序标签
.sort_index() 按索引排序
.drop() 删除
lst=[1,2,3,4,5,6,7]
s = pd.Series(lst,index=list("abcdefg"))
print(s)
print(s.head(1)) # 查看第1个数据
print(s.tail()) # 默认查看5条

索引

import pandas as pd
lst=[1,2,3]
s = pd.Series(lst,index=list("abc"))
print(s)
print(s.index) # 查看索引 
# Index(['a', 'b', 'c'], dtype='object')

# 标签索引和下标索引
# **标签索引**

import pandas as pd
lst=[1,2,3]
s = pd.Series(lst,index=list("abc"))
print(s)
print(s["a"]) 		# 索引index标签为"a"的元素,得到单个元素
print(s[["a","b"]]) # 索引index标签为"a"和"b"的元素,得到Series


# 按属性,索引元素
import pandas as pd
lst=[1,2,3]
s = pd.Series(lst,index=list("abc"))
print(s)
print(s.a) # 索引属性为"a"的元素,得到单个元素

# **下标索引**

import pandas as pd
lst=[1,2,3]
s = pd.Series(lst,index=list("abc"))
print(s)
print(s[-2],type(s[1])) 	# 索引倒数第2个元素,并查看数据类型
print(s[[1,2]]) 			# 索引下标索引为1和2的元素
sr = pd.Series(np.arange(10))
sr1 = sr[3:]
print(sr1)  
# 这是没问题的, 使用整数索引取值是优先以标签解释
# 就是index的值,不是下标

# 3    3
# 4    4
# 5    5
# 6    6
# ...
# 9    9
# dtype: int32

print(sr1[0])  # 报错 KeyError(key)
# 这种方式是取不出的,因为默认优先的是以标签解释的

解决方法:

  • loc 属性 以标签解释
  • iloc 属性 以下标(索引)解释
print(sr1.loc[0])   # 报错  KeyError(key)
print(sr1.iloc[0])  # 3
# 重新索引

import pandas as pd
s = pd.Series([1,2],index=["a","b"])
print(s)
s2=s.reindex(["b","d"])
print(s2)
s3=s.reindex(["a","e"],fill_value=0) # fill_value参数,填充缺失值
print(s3)

# 执行结果
a    1
b    2
dtype: int64
b    2.0
d    NaN
dtype: float64
a    1
e    0
dtype: int64

缺失数据

  • dropna() # 过滤掉值为NaN的行
  • fillna() # 填充缺失数据
  • isnull() # 返回布尔数组,缺失值对应为True
  • notnull() # 返回布尔数组,缺失值对应为False
import numpy as np
import pandas as pd
lst=[1,2,3,None,np.nan] # None 空值, NaN 有问题的值
s = pd.Series(lst,index=list("abcde"))
bool_arr=s.isnull()
print(s[bool_arr])

d   NaN
e   NaN
dtype: float6

添加和修改

import pandas as pd
s=pd.Series([1,2],index=[0,1])
s["a"]="2" #添加
print(s)

import pandas as pd
s1=pd.Series([1,2],index=[0,1])
s2=pd.Series([1,2],index=["index0","index1"])
s=pd.concat([s1, s2], ignore_index=False)   # 将s2追加到s1后面.不会改变s1的值
print(s)

# 执行结果
0    1
1    2
a    2
dtype: object
0         1
1         2
index0    1
index1    2
dtype: int64

删除

import pandas as pd
s = pd.Series([1,2,3,4],index=list("abcd"))
s2=s.drop("a")  #删除index标签为"a"的值
print(s2)
s3=s.drop(["b","c"]) # s的值没有更改
print(s3)

DataFrame

DataFrame是一种表格型数据结构,有多种创建方式,它含有一组有序的列,每列可以是不同的值。DataFrame既有行索引,也有列索引,它可以看作是由Series组成的字典。

创建DataFrame

pandas.DataFrame( data, index, columns, dtype, copy)

参数说明:

  • data:一组数据(ndarray、series, map, lists, dict 等类型)。
  • index:索引值,或者可以称为行标签。
  • columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
  • dtype:数据类型。
  • copy:拷贝数据,默认为 False。

根据字典创建

data = {
    'state':['python','python','python','go','java'],
    'year':[2000,2001,2002,2001,2002],
    'pop':[1.5,1.7,3.6,2.4,2.9]
}
frame = pd.DataFrame(data)
print(frame)

#输出
    state  year  pop
0  python  2000  1.5
1  python  2001  1.7
2  python  2002  3.6
3      go  2001  2.4
4    java  2002  2.9

根据List[Dict]创建

import pandas as pd

data = {'a': [1, 2, 3], 'b': [4, 5, 6]}
df = pd.DataFrame.from_dict(data)
print(df)

data = [{'a':1,'b':4},{'a':2,'b':5},{'a':3,'b':4}]
df = pd.DataFrame.from_dict(data)
print(df)

   a  b
0  1  4
1  2  5
2  3  6
   a  b
0  1  4
1  2  5
2  3  6

由列表,元组,数组

import numpy as np
import pandas as pd
lst=[np.array([1,2,3]),
     np.array([4,5,6]),
     np.array([7,8,9])]
df=pd.DataFrame(lst)
print(df) 

#输出
   0  1  2
0  1  2  3
1  4  5  6
2  7  8  9

{(元组)字典} 或 {[列表]字典}

import pandas as pd
dic={"clm0":[1,2,3],
     "clm1":[4,5,6],
     "clm2":[7,8,9]}
df=pd.DataFrame(dic)
print(df) 
#输出
   clm0  clm1  clm2
0     1     4     7
1     2     5     8
2     3     6     9

由Series创建

import pandas as pd
clm=["clm0","clm1","clm2"]
lst=[pd.Series([1,2,3],name="idx0",index=clm),
     pd.Series([4,5,6],name="idx1",index=clm),
     pd.Series([7,8,9],name="idx2",index=clm)]
df=pd.DataFrame(lst)
print(df) 

# 输出
      clm0  clm1  clm2
idx0     1     2     3
idx1     4     5     6
idx2     7     8     9

定义行列

import pandas as pd
dic=lst=[[1,2,3],
        [4,5,6],
        [7,8,9]]

idx=["idx2","idx0","idx2"] # 标签可以重复, 但请尽量避免
clm=["clm1","clm3","clm0"] # 没有的引入NaN值
df=pd.DataFrame(dic,index=idx,columns=clm)
print(df) 


      clm1  clm3  clm0
idx2     1     2     3
idx0     4     5     6
idx2     7     8     9

常用操作

DataFrame常用属性如下:

  1. values:数据值
  2. index:行标签
  3. columns:列标签
  4. shape:形状

因为pandas是基于numpy的,所以有numpy的很多特性,Series和numpy很多类似

函数属性 描述
.name() .rename(new_name) 名称,重命名
.head(n) .tail(n) 头几个数据,尾几个数据,默认5条n可选
.set_index([],inplace=True) 设置某列为索引
.reset_index() 重置表索引
索引排序 .loc[] 以标签为索引 [行标签,]
.iloc[] 以下标为索引, [行下标]
.reindex() 重新对索引进行标签
.sort_values() 按值排序标签
.sort_index() 按索引排序
.drop() 删除
计算描述统计 .describe() 数值型数据的快速统计汇总
.round(2) 显示数字保留两位小数
df.apply(func[,axis,...])

查看行名与列名

# 查看行名
df1.index

# 查看列名。
df3.columns

# 查看数据值
df3.values

# 查看数据维度
df3.shape

# 查看数据长度
df3.shape[0]

索引和切片

操作 句法 结果
选择列 df[col] Series
用标签选择行 df.loc[label] Series
用整数位置选择行 df.iloc[loc] Series
行切片(连续) df[5:10] DataFrame
用布尔向量选择行 df[bool_vec] DataFrame
import pandas as pd

df = pd.DataFrame.from_dict(dict([('A', [1, 2, 3]), ('B', [4, 5, 6])]),
                            orient='index', columns=['one', 'two', 'three'])

print(df)
   one  two  three
A    1    2      3
B    4    5      6


print(df['one'])           #  查看列
print(df.loc[["A","B"]])   #  根据行标签,查看行
df.iloc[0]                 #  根据行索引,查看行

A    1
B    4
Name: one, dtype: int64
   one  two  three
A    1    2      3
B    4    5      6

添加和修改

添加行、添加列

import pandas as pd
lst=[[1,2],
     [3,4]]
idx=["idx0","idx1"] 
clm=["clm0","clm1"] 
df=pd.DataFrame(lst,index=idx,columns=clm)
print(df)
df["add"]="0"
print(df)
df.loc["app0"]="0"
print(df)

      clm0  clm1
idx0     1     2
idx1     3     4
      clm0  clm1 add
idx0     1     2   0
idx1     3     4   0
     clm0 clm1 add
idx0    1    2   0
idx1    3    4   0
app0    0    0   0
import pandas as pd

df = pd.DataFrame.from_dict(dict([('A', [1, 2, 3]), ('B', [4, 5, 6])]),
                            orient='index', columns=['one', 'two', 'three'])


df['flag'] = df['one'] > 2
print(df)
# 执行结果
   one  two  three
A    1    2      3
B    4    5      6
   one  two  three   flag
A    1    2      3  False
B    4    5      6   True

索引后修改

import pandas as pd
lst=[[1,2],
     [3,4]]
idx=["idx0","idx1"] 
clm=["clm0","clm1"] 
df=pd.DataFrame(lst,index=idx,columns=clm)
print(df)
df.loc["idx1","clm1"]=0
print(df)
# 执行结果
      clm0  clm1
idx0     1     2
idx1     3     4
      clm0  clm1
idx0     1     2
idx1     3     0

删除

import pandas as pd
lst=[[1,2,3],
     [4,5,6],
     [7,8,9]]
idx=["idx0","idx1","idx2"] 
clm=["clm0","clm1","clm2"] 
df=pd.DataFrame(lst,index=idx,columns=clm)
print(df)
print(df.drop("idx0"))
print(df.drop(["clm2"],axis=1))

# 执行结果
      clm0  clm1  clm2
idx0     1     2     3
idx1     4     5     6
idx2     7     8     9
      clm0  clm1  clm2
idx1     4     5     6
idx2     7     8     9
      clm0  clm1
idx0     1     2
idx1     4     5
idx2     7     8

参考资料

https://blog.csdn.net/abc13526222160/article/details/121022952

标签:index,df,Series,基础,索引,pd,print,数据结构,pandas
From: https://www.cnblogs.com/tian777/p/17624700.html

相关文章

  • CentOS7.*基础网络配置
    基础网络配置Ip地址: 唯一表示网络中主机地址的标识,由.隔开的四组十进制数组成每一组数不超过255子网掩码:用来确定IP的网络地址网关:访问其它网段时需要通过的设备IP地址,不同网段通讯需要经过路由器转发出去(网关)Dns服务器:进行域名与ip解析的服务器查看所有网络接口的信息ifconf......
  • # yyds干货盘点 #通过pandas读取列的数据怎么把一列中的负数全部转为正数?
    大家好,我是皮皮。一、前言前几天在Python最强王者群【wen】问了一个pandas数据处理的问题,一起来看看吧。二、实现过程这里【隔壁......
  • GPT之路(一) AI基础之自然语言处理NLP工作原理
    这篇随笔主要是介绍AI基础知识,自然语言处理NLP1.自然语言处理NLP工作原理自然语言处理(NaturalLanguageProcessing,NLP)是指计算机与人类自然语言进行交互的技术领域,它涉及到语音识别、文本分析、机器翻译、情感分析、自然语言生成等多个方面。NLP是人工智能的一个分支,它使计......
  • 《CUDA编程:基础与实践》读书笔记(5):统一内存编程
    统一内存(unifiedmemory)是一种逻辑上的概念,它既不是显存、也不是主机内存,而是CPU和GPU都可以访问并能保证一致性的虚拟存储器。使用统一内存对硬件有较高的要求:对于所有功能,GPU架构都必须不低于Kepler架构,主机应用程序必须为64位。对于一些较新的功能,至少需要Pascal架构的GPU......
  • 假期总结之Hive基础架构
    ApacheHive其2大主要组件就是:SQL解析器以及元数据存储,如下图。  元数据存储通常是存储在关系数据库如mysql/derby中。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。--Hive提供了Metastore服务进程提供元数据管理功......
  • Postman基础
    Postman基础参考博客:如何使用postman做接口测试常用的接口测试工具主要有以下几种:Postman:简单方便的接口调试工具,便于分享和协作。具有接口调试,接口集管理,环境配置,参数化,断言,批量执行,录制接口,MockServer,接口文档,接口监控等功能;JMeter:开源接口测试及压测工具,支持Lin......
  • c、Pandas
    Pandas官网:http://pandas.pydata.org/文档:中文文档:https://www.pypandas.cn/docs/Pandas是一个高性能的数据操作和分析工具。它在Numpy的基础上,提供了一种高效的DataFrame数据结构,使得在Python中进行数据清洗和分析非常快捷。Pandas采用了很多Numpy的代码风格,但最大的不同在......
  • 「算法与数据结构」从入门到进阶吐血整理推荐书单
    一.入门系列这些书籍通过图片、打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,背包问题等,不要求会实现,但是看过以下这些书对于之后实现算法打下坚实的思维基础。很适合在闲暇之余拿出来阅读一番。1.1《啊哈!算法》这不过是一本有趣的算法书而......
  • 想进大厂?先把这些数据结构与算法学明白!!!
    *文末有1元解锁专栏福利今天聊聊掌握了不一定能拿到大厂Offer,但不掌握一定进不去大厂的神技「数据结构与算法」。为什么突然提到了数据结构与算法呢?这要从一个朋友的吐槽开始。我这位朋友一心想进大厂,学历还不错、能力也不错,但就是拿不到大厂Offer。大家都劝他多刷LeetCode,把......
  • CSS基础:学习CSS样式的基本语法和应用,了解如何美化网页。
    CSS(层叠样式表)是一种用于描述网页上元素(例如文字、图像、背景等)外观和布局的样式语言。通过使用CSS,您可以控制和改变网页的外观,使其更具吸引力和易于使用。下面是一些CSS基础知识和常用的语法:选择器:CSS中的选择器用于选择要应用样式的HTML元素。最常见的选择器是元素选择器(例如......