数据帧(DataFrame)是二维数据结构,即数据以行和列的表格方式排列。

数据帧(DataFrame)的功能特点:

  • 潜在的列是不同的类型
  • 大小可变
  • 标记轴(行和列)
  • 可以对行和列执行算术运算

结构体

假设要创建一个包含学生数据的数据帧。参考以下图示 -

可以将上图表视为SQL表或电子表格数据表示。

pandas.DataFrame

pandas中的DataFrame可以使用以下构造函数创建 -

  1.  
  1. pandas.DataFrame( data, index, columns, dtype, copy)
  1.  
参数 描述
data 数据采取各种形式,如:ndarrayseriesmaplistsdictconstant和另一个DataFrame
index 对于行标签,要用于结果帧的索引是可选缺省值np.arrange(n),如果没有传递索引值。
columns 对于列标签,可选的默认语法是 - np.arange(n)。 这只有在没有索引传递的情况下才是这样。
dtype 每列的数据类型。
copy 如果默认值为False,则此命令(或任何它)用于复制数据。

创建DataFrame

Pandas数据帧(DataFrame)可以使用各种输入创建,如 -

  • 列表
  • 字典
  • 系列
  • Numpy ndarrays
  • 另一个数据帧(DataFrame)

在本章的后续章节中,我们将看到如何使用这些输入创建数据帧(DataFrame)。

创建一个空的DataFrame

创建基本数据帧是空数据帧。

  1. import pandas as pd
  2.  
  3. df = pd.DataFrame()
  4. print(df)

输出结果:

  1. Empty DataFrame
  2. Columns: []
  3. Index: []
 

从列表创建DataFrame

  可以使用单个列表或列表列表创建数据帧(DataFrame)。

实例-1

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

输出结果:


  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
 

实例-2

  1.  
  1. import pandas as pd
  2.  
  3. data = [['Alex',10],['Bob',12],['Clarke',13]]
  4. df = pd.DataFrame(data,columns=['Name','Age'])
  5. print(df)
  1.  

输出结果:

  1. Name Age
  2. 0 Alex 10
  3. Bob 12
  4. Clarke 13
 

实例-3

  1.  
  1. import pandas as pd
  2.  
  3. data = [['Alex',10],['Bob',12],['Clarke',13]]
  4. df = pd.DataFrame(data,columns=['Name','Age'],dtype=float)
  5. print(df)
  1.  

输出结果:

  1. Name Age
  2. 0 Alex 10.0
  3. 1 Bob 12.0
  4. 2 Clarke 13.0
 

注意 - 可以观察到,dtype参数将Age列的类型更改为浮点。

从ndarrays/Lists的字典来创建DataFrame

所有的ndarrays必须具有相同的长度。如果传递了索引(index),则索引的长度应等于数组的长度。

如果没有传递索引,则默认情况下,索引将为range(n),其中n为数组长度。

实例-1

  1. import pandas as pd
  2.  
  3. data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
  4. df = pd.DataFrame(data)
  5. print(df)

输出结果:

  1. Age Name
  2. 0 28 Tom
  3. 1 34 Jack
  4. 2 29 Steve
  5. 3 42 Ricky
 

注 - 观察值0,1,2,3。它们是分配给每个使用函数range(n)的默认索引。

示例-2

使用数组创建一个索引的数据帧(DataFrame)。

  1. import pandas as pd
  2.  
  3. data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
  4. df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
  5. print(df)

输出结果:

  1. Age Name
  2. rank1 28 Tom
  3. rank2 34 Jack
  4. rank3 29 Steve
  5. rank4 42 Ricky
 

注意 - index参数为每行分配一个索引。

从字典列表创建数据帧DataFrame

字典列表可作为输入数据,用来创建数据帧(DataFrame),字典键默认为列名。

实例-1

以下示例显示如何通过传递字典列表来创建数据帧(DataFrame)。

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

输出结果:

  1. a b c
  2. 0 1 2 NaN
  3. 1 5 10 20.0
 

注意 - 观察到,NaN(不是数字)被附加在缺失的区域。

示例-2

以下示例显示如何通过传递字典列表和行索引来创建数据帧(DataFrame)。

  1. import pandas as pd
  2.  
  3. data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
  4. df = pd.DataFrame(data, index=['first', 'second'])
  5. print(df)

输出结果:

  1. a b c
  2. first 1 2 NaN
  3. second 5 10 20.0

实例-3

以下示例显示如何使用字典,行索引和列索引列表创建数据帧(DataFrame)。

  1. import pandas as pd
  2.  
  3. data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
  4.  
  5. #With two column indices, values same as dictionary keys
  6. df1 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b'])
  7.  
  8. #With two column indices with one index with other name
  9. df2 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b1'])
  10. print(df1)
  11. print('\n')
  12.  
  13. print(df2)

输出结果:

  1. a b
  2. first 1 2
  3. second 5 10
  4. a b1
  5. first 1 NaN
  6. second 5 NaN
 

注意 - 观察,df2使用字典键以外的列索引创建DataFrame; 因此,附加了NaN到位置上。 而df1是使用列索引创建的,与字典键相同,所以也附加了NaN。

从系列的字典来创建DataFrame

字典的系列可以传递以形成一个DataFrame。 所得到的索引是所有系列索引的并集。

示例

  1. import pandas as pd
  2.  
  3. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  4. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
  5.  
  6. df = pd.DataFrame(d)
  7. print(df)

输出结果:

  1. one two
  2. a 1.0 1
  3. b 2.0 2
  4. c 3.0 3
  5. d NaN 4
 

注意 - 对于第一个系列,观察到没有传递标签'd',但在结果中,对于d标签,附加了NaN。

列选择,添加和删除。

列选择

  通过列名,来选择列

  1. import pandas as pd
  2.  
  3. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  4. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
  5.  
  6. df = pd.DataFrame(d)
  7. print(df ['one'])

输出结果:

  1. a 1.0
  2. b 2.0
  3. c 3.0
  4. d NaN
  5. Name: one, dtype: float64
 

列添加

  像字典赋值一样直接添加。

  1. import pandas as pd
  2.  
  3. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  4. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
  5.  
  6. df = pd.DataFrame(d)
  7.  
  8. # Adding a new column to an existing DataFrame object with column label by passing new series
  9.  
  10. print ("Adding a new column by passing as Series:")
  11. df['three']=pd.Series([10,20,30],index=['a','b','c'])
  12. print(df)
  13. print('\n')
  14.  
  15. print ("Adding a new column using the existing columns in DataFrame:")
  16. df['four']=df['one']+df['three']
  17. print(df)

输出结果:

  1. Adding a new column by passing as Series:
  2. one two three
  3. a 1.0 1 10.0
  4. b 2.0 2 20.0
  5. c 3.0 3 30.0
  6. d NaN 4 NaN
  7. Adding a new column using the existing columns in DataFrame:
  8. one two three four
  9. a 1.0 1 10.0 11.0
  10. b 2.0 2 20.0 22.0
  11. c 3.0 3 30.0 33.0
  12. d NaN 4 NaN NaN
 

列删除

列可以删除或弹出;

  1. import pandas as pd
  2.  
  3. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  4. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']),
  5. 'three' : pd.Series([10,20,30], index=['a','b','c'])}
  6.  
  7. df = pd.DataFrame(d)
  8. print ("Our dataframe is:")
  9. print(df)
  10. print('\n')
  11.  
  12. # using del function
  13. print ("Deleting the first column using DEL function:")
  14. del df['one']
  15. print(df)
  16. print('\n')
  17.  
  18. # using pop function
  19. print ("Deleting column using POP function:")
  20. df.pop('two')
  21. print(df)

输出结果 -

  1. Our dataframe is:
  2. one three two
  3. a 1.0 10.0 1
  4. b 2.0 20.0 2
  5. c 3.0 30.0 3
  6. d NaN NaN 4
  7. Deleting the first column using DEL function:
  8. three two
  9. a 10.0 1
  10. b 20.0 2
  11. c 30.0 3
  12. d NaN 4
  13. Deleting column using POP function:
  14. three
  15. a 10.0
  16. b 20.0
  17. c 30.0
  18. d NaN
 

行选择,添加和删除

行选择

标签选择

可以通过将行标签传递给loc()函数来选择行。参考以下示例代码 -

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

输出结果:

  1. one 2.0
  2. two 2.0
  3. Name: b, dtype: float64

结果是一系列标签作为DataFrame的列名称。 而且,系列的名称是检索的标签。

按整数位置选择

可以通过将整数位置传递给iloc()函数来选择行。参考以下示例代码 -

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

输出结果:

  1. one 3.0
  2. two 3.0
  3. Name: c, dtype: float64

行切片

可以使用:运算符选择多行。参考以下示例代码 -

  1. import pandas as pd
  2.  
  3. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  4. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
  5.  
  6. df = pd.DataFrame(d)
  7. print(df[2:4])

输出结果:

  1. one two
  2. c 3.0 3
  3. d NaN 4
 

附加行

使用append()函数将新行添加到DataFrame。 此功能将附加行结束。

  1. import pandas as pd
  2.  
  3. df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
  4. df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
  5.  
  6. df = df.append(df2)
  7. print(df)

输出结果:

  1. a b
  2. 0 1 2
  3. 1 3 4
  4. 0 5 6
  5. 1 7 8
 

删除行

使用索引标签从DataFrame中删除或删除行。 如果标签重复,则会删除多行。

  1. import pandas as pd
  2.  
  3. df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
  4. print(df)
  5. print('\n')
  6.  
  7. df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
  8. print(df2)
  9. print('\n')
  10.  
  11. df = df.append(df2)
  12. print(df)
  13. print('\n')
  14.  
  15. # Drop rows with label 0
  16. df = df.drop(0)
  17. print(df)

输出结果:

a   b
0  1   2
1  3   4

a    b
0   5    6
1   7   8

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

   a   b
1   3   4
1   7   8

  1.  

在上面的例子中,一共有两行被删除,因为这两行包含相同的标签0

 

Pandas | 03 DataFrame 数据帧的更多相关文章

  1. [Pandas] 03 - DataFrame

    DataFrame 表格基本操作 初始化 一并设置 index & columns 类似于倒排表,column相当于words. index就是doc id. df = pd.DataFram ...

  2. python 数据处理学习pandas之DataFrame

    请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来 ...

  3. Pandas之Dataframe叠加,排序,统计,重新设置索引

    Pandas之Dataframe索引,排序,统计,重新设置索引 一:叠加 import pandas as pd a_list = [df1,df2,df3] add_data = pd.concat ...

  4. pandas中DataFrame对象to_csv()方法中的encoding参数

    当使用pd.read_csv()方法读取csv格式文件的时候,常常会因为csv文件中带有中文字符而产生字符编码错误,造成读取文件错误,在这个时候,我们可以尝试将pd.read_csv()函数的enco ...

  5. Python3 Pandas的DataFrame数据的增、删、改、查

    Python3 Pandas的DataFrame数据的增.删.改.查 一.DataFrame数据准备 增.删.改.查的方法有很多很多种,这里只展示出常用的几种. 参数inplace默认为False,只 ...

  6. Python3 Pandas的DataFrame格式数据写入excle文件、json、html、剪贴板、数据库

    Python3 Pandas的DataFrame格式数据写入excle文件.json.html.剪贴板.数据库 一.DataFrame格式数据 Pandas是Python下一个开源数据分析的库,它提供 ...

  7. python. pandas(series,dataframe,index) method test

    python. pandas(series,dataframe,index,reindex,csv file read and write) method test import pandas as ...

  8. pandas取dataframe特定行/列

    1. 按列取.按索引/行取.按特定行列取 import numpy as np from pandas import DataFrame import pandas as pd df=DataFram ...

  9. Pandas中DataFrame修改列名

    Pandas中DataFrame修改列名:使用 rename df = pd.read_csv('I:/Papers/consumer/codeandpaper/TmallData/result01- ...

随机推荐

  1. RabbitMQ心跳检测与掉线重连

    1.RabbitMQListener,自定义消息监听器 using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using ...

  2. 【More Effective C++ 条款4】非必要不提供default constructor

    1)default constructor:在没有任何外来信息的情况下将对象初始化 2)但是有些对象如果没有外来信息,就没有办法完成初始化动作,那么这些对象,就没有必要提供default constr ...

  3. Prometheus 一条告警的触发流程、等待时间

    Prometheus 一条告警的触发流程.等待时间 报警处理流程如下:1. Prometheus Server监控目标主机上暴露的http接口(这里假设接口A),通过上述Promethes配置的'sc ...

  4. pack URI

    WPF使用pack URI语法寻找资源. URI负责搜索如下位置的资源: 当前程序集 引用的程序集 相对于程序集的某个位置 应用程序的源站点 pack URI的格式:pack://机构/路径 机构指定 ...

  5. C#实现高性能高并发Socket服务器

    1.高并发服务器实现一 本文转载 转载地址 2.高并发服务器实现二 本文转载 转载内容在于学习C#实现的高并发服务器 以下个人观点 1 需要注意SocketAsyncEventArgs的使用 2 做到 ...

  6. Winform中实现ZedGraph不显示y=0这条刻度线

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  7. 设计模式之(九)桥接模式(Bridge)

    桥接模式是怎么诞生的呢?来看一个场景. 一个软件企业开发一套系统,要兼容所有的不同类型硬件和和各种操作系统.不同种类硬件主要是 电脑.平板电脑.手机.各种操作系统是苹果系统.windows 系统.Li ...

  8. 性能测试-MySQL性能查看(转)

    mysql查看数据库性能常用命令 mysql> show global status; 可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句: mysql> sh ...

  9. stdin,stdout 和 STDOUT_FILENO,STDIN_FILENO

    stdin,stdout 等类型为 FILE *. STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO 等类型为 int. 使用 FILE * 的函数主要有:fopen. ...

  10. Linux shell之重定向输入,输出

    shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕返回给用户.这种对话方式可以是交互的方式(从键盘输入命令 ...