当前位置: 首页 > news >正文

DataFrame基础(不包含列删除及行相关操作)

一.Dataframe简介

        DataFrame 的每一行或列数据都可以看成一个 Series 结构,只不过,DataFrame 为这些行中每个数据值增加了一个列或行标签。

        同 Series 一样,DataFrame 自带行标签索引,默认为“隐式索引”即从 0 开始依次递增,行标签与 DataFrame 中的数据项一一对应当然你也可以用“显式索引”的方式来设置行标签。

二.创建Dataframe对象

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

data:一组数据(ndarray、series, map, lists, dict 等类型)

index:索引值,或者可以称为行标签

columns:列标签,默认为RangeIndex (0, 1, 2, …, n)

dtype:数据类型<br/>copy:默认为 False,表示复制数据 data

2.1 空Dataframe

import pandas as pd

df = pd.DataFrame()
print(df)

Empty DataFrame
Columns: []
Index: []

2.2 列表嵌套字典创建

data = [
    {'name': 'John', 'age': 25, 'city': 'New York'},
    {'name': 'Alice', 'age': 30, 'city': 'London'},
    {'name': 'Bob', 'age': 28, 'city': 'Paris'}
]
df = pd.DataFrame(data)
print(df)

name  age      city
0   John   25  New York
1  Alice   30    London
2    Bob   28     Paris

        这个方法创建就是把每个字典当作一整条数据传入Dataframe,分别用key来当作列标签,然后用默认标签来依次取行下标。

那我两个字典长度不一样怎么办?

# 有些字段一样,几个不同
data1 = [
    # 不传值,会默认为NaN
    {'name': 'John', 'age': 25},
    {'name': 'Alice', 'age': 30,'city':'Paris'},
    # 传入空值,猜猜会显示啥
    {'name': 'Bob', 'age': 28, 'city': None}
    
]
df = pd.DataFrame(data1)
print(df)

name  age   city
0    John   25    NaN
1   Alice   30  Paris
2     Bob   28   None
3  miller   28    NaN

        可以看到,其将多出来的标签下,没有传这个标签的其他行变为'Not a number'即缺失值(会被存储为浮点数),如果传入一个None值那就会显示为None(也算一种值)。

        其实本质上None和NaN是同一种表达,都表示这个地方没有正常值,但是一般来说还是缺失值用的多,毕竟None也是一种值。

2.3 字典嵌套列表创建

dic = {'name':['张三','李四'],'age':[10,18]}

df = pd.DataFrame(dic)
print(df)

name  age
0   张三   10
1   李四   18

        这个方法创建就是把字典中每个key作为列标签,每个value对应传入一个列表,当作列标签下的数据。

多说一句,这里要是各个标签下的数据长度不一致的话,会报错。

dic = {'name':['张三','李四'],'age':[10,18,19]}

df = pd.DataFrame(dic)
print(df)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

~~~~~~

~~~~
~~~~(此处省略)

2.4 字典嵌套series创建


dic = 
{'name':pd.Series(['clocky','Miko'],index=['a','b']),
 # 这里试试给行标签多加了一行,会报错吗?
 'age':pd.Series([20,21,22],index=['a','b','c'])}

df = pd.DataFrame(dic)
print(df)

name  age
a  clocky   20
b    Miko   21
c     NaN   22

答案是不会报错,这个创建方式也就是升级版的字典嵌套列表创建。但是可以自定义标签值。

三.列索引操作

3.1 获取数据

import pandas as pd

df = pd.DataFrame({'name':['clocky','tom'],'age':[18,20]})
# 获取一列,返回Series
print(df['name'])

# 获取多列,返回DataFrame
# 获取多列时需要多加一个[]
print(df[['name','age']])

0    clocky
1       tom
Name: name, dtype: object
     name  age
0  clocky   18
1     tom   20

3.2 添加列

3.2.1 添加空列

import pandas as pd
df = pd.DataFrame({'name':['clocky','tom'],'age':[18,20]})

# 添加一个不存在的标签,其为全空
df['sex'] = None
print(df)

name  age   sex
0  clocky   18  None
1     tom   20  None

3.2.2 通过列表添加实际的数据

import pandas as pd
df = pd.DataFrame({'name':['clocky','Susie'],'age':[18,20]})

# 使用列表添加
df['sex'] = ['male','female']
print(df)

name  age     sex
0  clocky   18    male
1   Susie   20  female

3.2.3 assign 方法

- 可以链式调用,就是可以连续调用比如 a.assign(b=1).assign(c=2)

- 方法返回的数据类型是数据本身,这就是链式编程;重复调用这个方法就是链式调用

import pandas as pd
df = pd.DataFrame({'name':['clocky','Susie'],'age':[18,20]})

# 这里新加的标签就不用加''了,且连续调用仔细看看
df1 = df.assign(sex = ['male','famale']).assign(address = ['beijing','shanghai'])
print(df1)

name  age     sex   address
0  clocky   18    male   beijing
1   Susie   20  famale  shanghai

3.2.4 insert指定位置插入列

参数:

- loc: 插入位置的列索引。

- column: 新列的名称。

- value: 要插入的 Series(可迭代对象)。

import pandas as pd
df = pd.DataFrame(
    {'name':['clocky','Susie'],
     'age':[18,20]})

# 在索引1的位置插入一列
df.insert(1,'sex',['male','famle'])
print(df)

name    sex  age
0  clocky   male   18
1   Susie  famle   20

3.3 修改列数据

3.3.1 直接覆盖

import pandas as pd
df = pd.DataFrame(
    {'name':['clocky','Susie'],
     'age':[18,20]})

# 直接用索引赋值
df['age'] += 100
print(df)

name  age
0  clocky  118
1   Susie  120

3.3.2 修改列名

# columns 属性修改
import pandas as pd
df = pd.DataFrame(
    {'name':['clocky','Susie'],
     'age':[18,20]})

# 其实也是直接覆盖
df.columns = ['n','a']
print(df)

n   a
0  clocky  18
1   Susie  20

# rename方法,返回一个新的DataFrame,原数据不变
import pandas as pd
df = pd.DataFrame(
    {'name':['clocky','Susie'],
     'age':[18,20]})

# rename方法,用columns传入一个字典,key为原列名,value为修改后的列名
pdf = df.rename(columns={'name':'姓名','age':'年龄'})

print(pdf)

姓名  年龄
0  clocky  18
1   Susie  20

3.3.3 .astype()修改列的数据类型

import pandas as pd
df = pd.DataFrame(
    {'name':['clocky','Susie'],
     'age':[18,20]})

# 修改第二列
df['age'] = df['age'].astype(float)
print(df)

name   age
0  clocky  18.0
1   Susie  20.0

http://www.dtcms.com/a/106843.html

相关文章:

  • error LNK2019: 无法解析的外部符号 __imp__XXXX,该符号在函数xxxxx中被引用
  • 45、Vue 中的动态组件
  • 深入理解多线程编程:从基础概念到实战应用
  • 【C++】类和对象(二)
  • 第三章 知识图谱赋能 RAG:构建结构化知识引擎
  • CoT-VLA:视觉-语言-动作模型的视觉思维链推理
  • 软件工程面试题(二十三)
  • Web服务器主动推送技术(SSE)
  • MongoDB 复制集实战
  • 笔记:docker安装(ubuntu 20.04)
  • C# 中充血模型和‌贫血模型
  • 从查重报告入手的精准论文降重秘籍
  • 基于 Spring Cloud 与 Spring Boot 的工程项目管理系统源码:重塑工程管理新范式​
  • 文件实时备份软件PanguFlow
  • zabbix监控网站(nginx、redis、mysql)
  • 在openharmony中编译部署早期vi工具(附带vi工具源码)
  • 生产管理系统如何破解汽车零部件行业追溯难痛点
  • (Kotlin) Android使用DialogX实现iOS风格底部弹窗(带Toggle开关)
  • 算法与数据结构面试题
  • 【硬件视界8】电源供应器(PSU):计算机的“心脏“
  • 洛谷题单3-P5720 【深基4.例4】一尺之棰-python-流程图重构
  • Tomcat 部署 Jenkins.war 详细教程(含常见问题解决)
  • 存储型XSS漏洞解析
  • springBoot统一响应类型3.5.2版本
  • 【橘子大模型】关于PromptTemplate
  • 定制化管理系统与通用管理系统,谁更胜一筹?
  • MySQL的进阶语法7(索引-B+Tree 、Hash、聚集索引 、二级索引(回表查询)、索引的使用及设计原则
  • ES6对函数参数的新设计
  • 贪心算法,其优缺点是什么?
  • 第二篇:系统分析师——1-6章