【数据分析】pandas( 二)

目录

简介:

一,1.1来自Series字典或字典

 1.2 来自ndarray或者列表的字典:

1.3来自结构化或记录数组;

 1.4来自字典列表:

 1.4来自元组的字典:

1.5 来自Series

二,代替构造函数:

2.1DataFrame.from_dict

 2.2DataFrame.from_records

 三,列表的选择,删除,添加

四,在方法链中分配新列 

五,索引

 六,数据对齐:


简介:

本片文章我们来介绍pandas的另一个数据类型DataFrame

DataFrame是一个二维标记数据结构,其中包含可能不同类型的列。您可以将其视为电子表格或SQL表,或者Series对象的字典。它通常是最常用的pandas对象。与Series一样,DataFrame接受许多不同类型的输入:

 一维ndarray,列表,字典,或字典的Series

二维numpy.ndarray

结构化或记录数组

一个Series

其他DataFrame等

除了数据之外,您还可以选择传递索引(行标签)和列(列标签)参数。如果您传递索引和/或列,则可以保证生成的DataFrame的索引和/或列。因此,Series的字典加上特定索引将丢弃所有与传递的索引不匹配的数据。如果未传递轴标签,他们将根据常识规则从输入数据构建。

一,1.1来自Series字典或字典

生成的索引将是各个系列的索引的并集。如果有任何嵌套字典他们将首先转化为系列。如果每日有传递列,则列将是字典键的有序列表。

d={

"one":pd.Series([1.0,2.0,3.0],index=["a","b","c"]),

"two":pd.Series([1.0,2.0,3.0,4.0],index=["a","b","c","d"]),

}

df = pd.DataFrame(d)

 one  two
a  1.0  1.0
b  2.0  2.0
c  3.0  3.0
d  NaN  4.0

pd.DataFrame(d, index=["d", "b", "a"])

  one  two
d  NaN  4.0
b  2.0  2.0
a  1.0  1.0
pd.DataFrame(d, index=["d", "b", "a"], columns=["two", "three"])
two three
d  4.0   NaN
b  2.0   NaN
a  1.0   NaN

 可以通过访问index喝columns属性来分别访问行和列 标签:

df.index
Out: Index(['a', 'b', 'c', 'd'], dtype='object')

df.columns
Out: Index(['one', 'two'], dtype='object')

 1.2 来自ndarray或者列表的字典:

ndarray的长度必须相同。如果传递索引,他也必须与数组的长度相同,如果没有传递索引,结果将为range(n),n为数组长度。

d = {"one": [1.0, 2.0, 3.0, 4.0], "two": [4.0, 3.0, 2.0, 1.0]}
pd.DataFrame(d)
pd.DataFrame(d, index=["a", "b", "c", "d"])
one  two
0  1.0  4.0
1  2.0  3.0
2  3.0  2.0
3  4.0  1.0
one  two
a  1.0  4.0
b  2.0  3.0
c  3.0  2.0
d  4.0  1.0

1.3来自结构化或记录数组;

这种情况的处理方式与数组字典相同

data = np.zeros((2,), dtype=[("A", "i4"), ("B", "f4"), ("C", "a10")])

data[:] = [(1, 2.0, "Hello"), (2, 3.0, "World")]

pd.DataFrame(data)
   A    B         C
0  1  2.0  b'Hello'
1  2  3.0  b'World'

pd.DataFrame(data, index=["first", "second"])
        A    B         C
first   1  2.0  b'Hello'
second  2  3.0  b'World'

 pd.DataFrame(data, columns=["C", "A", "B"])
          C  A    B
0  b'Hello'  1  2.0
1  b'World'  2  3.0

 1.4来自字典列表:

data2 = [{"a": 1, "b": 2}, {"a": 5, "b": 10, "c": 20}]

pd.DataFrame(data2)
   a   b     c
0  1   2   NaN
1  5  10  20.0

pd.DataFrame(data2, index=["first", "second"])
        a   b     c
first   1   2   NaN
second  5  10  20.0

pd.DataFrame(data2, columns=["a", "b"])
   a   b
0  1   2
1  5  10

 1.4来自元组的字典:

可以通过传递元组字典来自动创建MultiIndexed frame

 pd.DataFrame(
    {
      ("a", "b"): {("A", "B"): 1, ("A", "C"): 2},
      ("a", "a"): {("A", "C"): 3, ("A", "B"): 4},
      ("a", "c"): {("A", "B"): 5, ("A", "C"): 6},
     ("b", "a"): {("A", "C"): 7, ("A", "B"): 8},
     ("b", "b"): {("A", "D"): 9, ("A", "B"): 10},
      }
   )
       a              b      
       b    a    c    a     b
A B  1.0  4.0  5.0  8.0  10.0
  C  2.0  3.0  6.0  7.0   NaN
  D  NaN  NaN  NaN  NaN   9.0

1.5 来自Series

 结果将是一个与输入Series具有相同索引的DataFrame,并且其中一列的名称是Series的原始名称(仅当 为提供其他列名称时)

ser = pd.Series(range(3), index=list("abc"), name="ser")

pd.DataFrame(ser)

   ser
a    0
b    1
c    2

二,代替构造函数:

2.1DataFrame.from_dict

DataFrame.from_dict()接受一个字典或一个近似数组序列的字典并返回一个DataFrame。他的操作类似于DataFrame构造函数,除了默认 orient参数是columns之外,还可以设置该参数index使用字典键作为行标签。

pd.DataFrame.from_dict(dict([("A", [1, 2, 3]), ("B", [4, 5, 6])]))

   A  B
0  1  4
1  2  5
2  3  6

 通过orient='index' 键将是行标签。在这种情况下,还可以传递所需列的名称。

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

   one  two  three
A    1    2      3
B    4    5      6

 2.2DataFrame.from_records

DataFrame.from_records()接收元组列表或具有结构化数据类型的ndarray。他的工作方式与普通DataFrame构造函数类似,只是生成的DataFrame 索引可能是结构化数据类型的特定字段。

 data
array([(1, 2., b'Hello'), (2, 3., b'World')],
      dtype=[('A', '<i4'), ('B', '<f4'), ('C', 'S10')])

pd.DataFrame.from_records(data, index="C")
          A    B
C               
b'Hello'  1  2.0
b'World'  2  3.0

 三,列表的选择,删除,添加

可以将DataFrame语义视为相似索引Series对象的字典。获取设置和删除列的语法与类似的dict操作相同

df["one"]
a    1.0
b    2.0
c    3.0
d    NaN
Name: one, dtype: float64

 df["three"] = df["one"] * df["two"]

 df["flag"] = df["one"] > 2

 df

   one  two  three   flag
a  1.0  1.0    1.0  False
b  2.0  2.0    4.0  False
c  3.0  3.0    9.0   True
d  NaN  4.0    NaN  False

 也可以像字典一样删除或弹出列:

 del df["two"]

 three = df.pop("three")

df


   one   flag
a  1.0  False
b  2.0  False
c  3.0   True
d  NaN  False

 当插入标量值时,他自然会传播以填充列:

 df["foo"] = "bar"

 df

   one   flag  foo
a  1.0  False  bar
b  2.0  False  bar
c  3.0   True  bar
d  NaN  False  bar

当插入与Series不具有相同索引的DataFrame时,他将符合DataFrame的索引

Idf["one_trunc"] = df["one"][:2]

I df

   one   flag  foo  one_trunc
a  1.0  False  bar        1.0
b  2.0  False  bar        2.0
c  3.0   True  bar        NaN
d  NaN  False  bar        NaN

四,在方法链中分配新列 

DataFrame中有一种assign()方法可以轻松创建可能从现有列派生的新列

 iris = pd.read_csv("data/iris.data")

 iris.head()

   SepalLength  SepalWidth  PetalLength  PetalWidth         Name
0          5.1         3.5          1.4         0.2  Iris-setosa
1          4.9         3.0          1.4         0.2  Iris-setosa
2          4.7         3.2          1.3         0.2  Iris-setosa
3          4.6         3.1          1.5         0.2  Iris-setosa
4          5.0         3.6          1.4         0.2  Iris-setosa

iris.assign(sepal_ratio=iris["SepalWidth"] / iris["SepalLength"]).head()

   SepalLength  SepalWidth  PetalLength  PetalWidth         Name  sepal_ratio
0          5.1         3.5          1.4         0.2  Iris-setosa     0.686275
1          4.9         3.0          1.4         0.2  Iris-setosa     0.612245
2          4.7         3.2          1.3         0.2  Iris-setosa     0.680851
3          4.6         3.1          1.5         0.2  Iris-setosa     0.673913
4          5.0         3.6          1.4         0.2  Iris-setosa     0.720000

在上面的示例中,我们插入了一个预先计算的值。我们还可以传入一个只有一个参数的函数,以便在分配给的DataFrame上进行计算。

 iris.assign(sepal_ratio=lambda x: (x["SepalWidth"] / x["SepalLength"])).head()

   SepalLength  SepalWidth  PetalLength  PetalWidth         Name  sepal_ratio
0          5.1         3.5          1.4         0.2  Iris-setosa     0.686275
1          4.9         3.0          1.4         0.2  Iris-setosa     0.612245
2          4.7         3.2          1.3         0.2  Iris-setosa     0.680851
3          4.6         3.1          1.5         0.2  Iris-setosa     0.673913
4          5.0         3.6          1.4         0.2  Iris-setosa     0.720000

 assign()始终返回数据的副本,保持原始的DataFrame不变。

五,索引

选择语法结果
选择列df[col]Series
按标签选择行df.loc[label]Series
按整数位置选择行df.iloc[loc]Series
切片行df[5:10]DataFrame
通过布尔向量选择行df[bool_vec]DataFrame

例如,行选择返回一个Series,其索引是DataFrame的列

 df.loc["b"]

one            2.0
bar            2.0
flag         False
foo            bar
one_trunc      2.0
Name: b, dtype: object

 df.iloc[2]

one           3.0
bar           3.0
flag         True
foo           bar
one_trunc     NaN
Name: c, dtype: object

 六,数据对齐:

对象之间的数据对齐会在列和索引DataFrame上自动对齐,同样,生成的对象将具有列标签和行标签的并集

df = pd.DataFrame(np.random.randn(10, 4), columns=["A", "B", "C", "D"])In [95]: df2 = pd.DataFrame(np.random.randn(7, 3), columns=["A", "B", "C"])

 df + df2

          A         B         C   D
0  0.045691 -0.014138  1.380871 NaN
1 -0.955398 -1.501007  0.037181 NaN
2 -0.662690  1.534833 -0.859691 NaN
3 -2.452949  1.237274 -0.133712 NaN
4  1.414490  1.951676 -2.320422 NaN
5 -0.494922 -1.649727 -1.084601 NaN
6 -1.047551 -0.748572 -0.805479 NaN
7       NaN       NaN       NaN NaN
8       NaN       NaN       NaN NaN
9       NaN       NaN       NaN NaN

 DataFrame和Series之间执行操作时,默认行为是对齐列上的索引,从而按行广播,

df - df.iloc[0]

          A         B         C         D
0  0.000000  0.000000  0.000000  0.000000
1 -1.359261 -0.248717 -0.453372 -1.754659
2  0.253128  0.829678  0.010026 -1.991234
3 -1.311128  0.054325 -1.724913 -1.620544
4  0.573025  1.500742 -0.676070  1.367331
5 -1.741248  0.781993 -1.241620 -2.053136
6 -1.240774 -0.869551 -0.153282  0.000430
7 -0.743894  0.411013 -0.929563 -0.282386
8 -1.194921  1.320690  0.238224 -1.482644
9  2.293786  1.856228  0.773289 -1.446531

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/26744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

conda 环境 numpy 安装报错需要 Microsoft Visual C++ 14.0

到公司装深度学校环境。项目较旧&#xff0c;安装依赖&#xff0c;一堆报错&#xff08;基于 conda 环境&#xff09;&#xff1a; numpy 安装报需要 C 14.0 No module named numpy.distutils._msvccompiler in numpy.distutils; trying from distutilserror: Microsoft Visu…

预测知识 | 预测模型变量重要性、可视化及论文撰写指南

预测知识 | 预测模型变量重要性、可视化及论文撰写指南 目录 预测知识 | 预测模型变量重要性、可视化及论文撰写指南变量重要性模型可视化论文撰写指南参考资料 变量重要性 关于预测模型变量重要性&#xff0c;大家一定熟悉不过。但如下图所示&#xff0c;其展示上可有进一步优…

网络安全进阶学习第十三课——SQL注入Bypass姿势

文章目录 一、等号被过滤二、substr、mid等被过滤三、逗号被过滤四、and/or被过滤五、空格被过滤五、其他绕过方式 一、等号被过滤 1、like&#xff0c;rlike语句&#xff0c;其中rlike是正则2、大于号>&#xff0c;小于号<3、符号<>&#xff1a;<>为不等于…

飞凌OKMX6ULL-C开发板试用

开箱体验 主要配件包括&#xff1a;USB Type-C调试线、电源线、主板。 资源下载 开发环境 飞凌提供了制作好的ubuntu18.04的镜像&#xff0c;直接到网盘下载解压即可&#xff0c;VMWare的安装可以参考网上教程&#xff0c;这里不赘述。安装好VMWare后直接打开解压出来的ubu…

OBS 基础 之 使用python自动编译打包OBS项目

目录 一、使用python自动编译OBS项目 1、将VS devenv.exe 加入Path系统环境变量中 2、写编译文件build.py

高性能MySQL实战(一):表结构

大家好&#xff0c;我是 方圆。最近因需求改动新增了一些数据库表&#xff0c;但是在定义表结构时&#xff0c;具体列属性的选择有些不知其所以然&#xff0c;索引的添加也有遗漏和不规范的地方&#xff0c;所以我打算为创建一个高性能表的过程以实战的形式写一个专题&#xff…

IMv1.0

一、背景内容 总结golang基础内容&#xff0c;通过一个实例实时 IM系统简进行总结知识 二、简要的图 简要说明&#xff1a; 1.在server.go中&#xff0c;创建一个Newserver返回server指针的结构体 2.正对这个指针结构体实现两个方法 Handler&#xff08;处理方法&#xff0…

VBA遍历Wrod所有表格每个单元格,单元格未尾两个回车替换

一、遍历 word中遍历所有表格的每个单元格。因为在单元格时会常出错。浪费了不少时间。 Sub a()Dim doc As Document, tb As Table, ce As cellDim rng As Range, p As ParagraphSet doc ActiveDocumentFor Each tb In doc.TablesFor Each ce In tb.Range.Cells 关键处就是这里…

redis入门2-命令

Redis的基本数据类型 redis的基本数据类型&#xff08;value&#xff09;: string,普通字符串 hash&#xff08;哈希&#xff09;,适合存储对象 list(列表),按照插入顺序排序&#xff0c;可以由重复的元素 set(无序集合)&#xff0c;没有重复的元素 sorted set(有序集合)&…

Rust 原生支持龙架构指令集

导读近日&#xff0c;Rust 开源社区发布 1.71.0 版本&#xff0c;实现对龙架构&#xff08;LoongArch&#xff09;指令集的原生支持。 龙架构操作系统发行版和开发者可基于上游社区源代码构建或直接下载 Rust 开源社区发布的龙架构二进制版本。Rust 开发者将在龙架构平台上获得…

设计模式——原型模式

原型模式就是有时我们需要多个类的实例&#xff0c;但是一个个创建&#xff0c;然后初始化&#xff0c;这样太麻烦了&#xff0c;此时可以使用克隆&#xff0c;来创建出克隆对象&#xff0c;就能大大的提高效率。具体就是要让此类实现Cloneable接口&#xff0c;然后重写Object类…

题解 | #M.Writing Books# 2023牛客暑期多校7

M.Writing Books 签到 题目大意 给定一个正整数 n n n &#xff0c;求 1 1 1 ~ n n n 共有多少位数字 解题思路 1 1 1 ~ 9 9 9 共 9 1 0 0 1 9\times 10^0 \times 1 91001 位&#xff1b; 10 10 10 ~ 99 99 99 共 9 1 0 1 2 9\times 10^1 \times 2 91012 位&am…

【枚举】CF1706 C

有人一道1400写了一个小时 Problem - C - Codeforces 题意&#xff1a; 思路&#xff1a; 首先先去观察样例&#xff1a; 很显然&#xff0c;对于n是奇数的情况&#xff0c;只有一种情况&#xff0c;直接操作偶数位就好了 主要是没搞清楚n是偶数的情况 其实有个小技巧&…

深入理解高并发编程 - 线程的执行顺序

1、线程的执行顺序是不确定的 在Java中&#xff0c;线程的执行顺序是由操作系统的调度机制决定的&#xff0c;具体顺序是不确定的&#xff0c;取决于多个因素&#xff0c;如操作系统的调度策略、线程的优先级、线程的状态转换等。因此&#xff0c;不能对线程的执行顺序做出可靠…

无涯教程-Perl - delete函数

描述 此函数从哈希中删除指定的键和关联的值,或从数组中删除指定的元素。该操作适用于单个元素或切片。 语法 以下是此函数的简单语法- delete LIST返回值 如果键不存在,并且与已删除的哈希键或数组索引关联的值,则此函数返回undef。 Perl 中的 delete函数 - 无涯教程网无…

003-依赖注入、属性赋值源码分析

目录 引入作用代码分析InstantiationAwareBeanPostProcessor#postProcessProperties()AutowiredAnnotationBeanPostProcessor查找注入点元数据给注入点注入属性 引入 之前我们了解到BeanDefinition到Bean&#xff0c;经历了 实例化属性赋值初始化 3个步骤现在详细分析下属性赋…

分组背包问题

题目链接 题意&#xff1a;给出n组物品&#xff0c;每组物品的物品数量不同&#xff0c;要求每组中只能选一件物品&#xff0c;问m容量的最大价值 思路&#xff1a;实际上本题的本质还是01背包&#xff0c;只不过01背包是每一种物品只能选1次&#xff0c;而分组背包是每组物品只…

pdf转图片【java版实现】

一、引入依赖 引入需要导入到项目中的依赖&#xff0c;如下所示&#xff1a; <!-- pdf转图片 --><dependency><groupId>net.sf.cssbox</groupId><artifactId>pdf2dom</artifactId><version>1.7</version></dependency>…

FreeRTOS(vTaskList与vTaskGetRunTimeStats)

目录 1、Cube配置 ①配置SYS ②配置TIM3 ③配置USART2 ④配置FreeRTOS ⑤配置中断优先级 2、代码添加改动 ①在main函数合适位置开启TIM3中断 ②修改HAL_TIM_PeriodElapsedCallback函数 ③完善两个相关函数 ④vTaskList与vTaskGetRunTimeStats的使用 vTaskList&#xff…

p7付费课程笔记6:CMS GC

目录 前言 工作步骤 缺点 问题 前言 上一章节我们讲了串/并行GC&#xff0c;这一章节说下CMS GC。看前思考一个问题&#xff0c;并行GC与CMS GC的区别在哪里。 什么是CMS收集器 CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于…