Pandas | 03 DataFrame 数据帧
数据帧(DataFrame)是二维数据结构,即数据以行和列的表格方式排列。
数据帧(DataFrame)的功能特点:
- 潜在的列是不同的类型
- 大小可变
- 标记轴(行和列)
- 可以对行和列执行算术运算
结构体
假设要创建一个包含学生数据的数据帧。参考以下图示 -
可以将上图表视为SQL表或电子表格数据表示。
pandas.DataFrame
pandas中的DataFrame
可以使用以下构造函数创建 -
- pandas.DataFrame( data, index, columns, dtype, copy)
参数 | 描述 |
---|---|
data |
数据采取各种形式,如:ndarray ,series ,map ,lists ,dict ,constant 和另一个DataFrame 。 |
index |
对于行标签,要用于结果帧的索引是可选缺省值np.arrange(n) ,如果没有传递索引值。 |
columns |
对于列标签,可选的默认语法是 - np.arange(n) 。 这只有在没有索引传递的情况下才是这样。 |
dtype |
每列的数据类型。 |
copy |
如果默认值为False ,则此命令(或任何它)用于复制数据。 |
创建DataFrame
Pandas数据帧(DataFrame)可以使用各种输入创建,如 -
- 列表
- 字典
- 系列
- Numpy ndarrays
- 另一个数据帧(DataFrame)
在本章的后续章节中,我们将看到如何使用这些输入创建数据帧(DataFrame)。
创建一个空的DataFrame
创建基本数据帧是空数据帧。
- import pandas as pd
- df = pd.DataFrame()
- print(df)
输出结果:
Empty DataFrame
Columns: []
Index: []
从列表创建DataFrame
可以使用单个列表或列表列表创建数据帧(DataFrame)。
实例-1
- import pandas as pd
- data = [1,2,3,4,5]
- df = pd.DataFrame(data)
- print(df)
输出结果:
1
2
3
4
5
实例-2
- import pandas as pd
- data = [['Alex',10],['Bob',12],['Clarke',13]]
- df = pd.DataFrame(data,columns=['Name','Age'])
- print(df)
输出结果:
Name Age
0 Alex 10
Bob 12
Clarke 13
实例-3
- import pandas as pd
- data = [['Alex',10],['Bob',12],['Clarke',13]]
- df = pd.DataFrame(data,columns=['Name','Age'],dtype=float)
- print(df)
输出结果:
Name Age
0 Alex 10.0
1 Bob 12.0
2 Clarke 13.0
注意 - 可以观察到,
dtype
参数将Age
列的类型更改为浮点。
从ndarrays/Lists的字典来创建DataFrame
所有的ndarrays
必须具有相同的长度。如果传递了索引(index
),则索引的长度应等于数组的长度。
如果没有传递索引,则默认情况下,索引将为range(n)
,其中n
为数组长度。
实例-1
- import pandas as pd
- data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
- df = pd.DataFrame(data)
- print(df)
输出结果:
Age Name
0 28 Tom
1 34 Jack
2 29 Steve
3 42 Ricky
注 - 观察值
0
,1
,2
,3
。它们是分配给每个使用函数range(n)
的默认索引。
示例-2
使用数组创建一个索引的数据帧(DataFrame)。
- import pandas as pd
- data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
- df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
- print(df)
输出结果:
Age Name
rank1 28 Tom
rank2 34 Jack
rank3 29 Steve
rank4 42 Ricky
注意 -
index
参数为每行分配一个索引。
从字典列表创建数据帧DataFrame
字典列表可作为输入数据,用来创建数据帧(DataFrame),字典键默认为列名。
实例-1
以下示例显示如何通过传递字典列表来创建数据帧(DataFrame)。
- import pandas as pd
- data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
- df = pd.DataFrame(data)
- print(df)
输出结果:
a b c
0 1 2 NaN
1 5 10 20.0
注意 - 观察到,NaN(不是数字)被附加在缺失的区域。
示例-2
以下示例显示如何通过传递字典列表和行索引来创建数据帧(DataFrame)。
- import pandas as pd
- data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
- df = pd.DataFrame(data, index=['first', 'second'])
- print(df)
输出结果:
a b c
first 1 2 NaN
second 5 10 20.0
实例-3
以下示例显示如何使用字典,行索引和列索引列表创建数据帧(DataFrame)。
- import pandas as pd
- data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
- #With two column indices, values same as dictionary keys
- df1 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b'])
- #With two column indices with one index with other name
- df2 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b1'])
- print(df1)
- print('\n')
- print(df2)
输出结果:
a b
first 1 2
second 5 10
a b1
first 1 NaN
second 5 NaN
注意 - 观察,
df2
使用字典键以外的列索引创建DataFrame
; 因此,附加了NaN到位置上。 而df1
是使用列索引创建的,与字典键相同,所以也附加了NaN。
从系列的字典来创建DataFrame
字典的系列可以传递以形成一个DataFrame。 所得到的索引是所有系列索引的并集。
示例
- import pandas as pd
- 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)
输出结果:
one two
a 1.0 1
b 2.0 2
c 3.0 3
d NaN 4
注意 - 对于第一个系列,观察到没有传递标签
'd'
,但在结果中,对于d
标签,附加了NaN。
列选择,添加和删除。
列选择
通过列名,来选择列
- import pandas as pd
- 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 ['one'])
输出结果:
a 1.0
b 2.0
c 3.0
d NaN
Name: one, dtype: float64
列添加
像字典赋值一样直接添加。
- import pandas as pd
- 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)
- # Adding a new column to an existing DataFrame object with column label by passing new series
- print ("Adding a new column by passing as Series:")
- df['three']=pd.Series([10,20,30],index=['a','b','c'])
- print(df)
- print('\n')
- print ("Adding a new column using the existing columns in DataFrame:")
- df['four']=df['one']+df['three']
- print(df)
输出结果:
Adding a new column by passing as Series:
one two three
a 1.0 1 10.0
b 2.0 2 20.0
c 3.0 3 30.0
d NaN 4 NaN
Adding a new column using the existing columns in DataFrame:
one two three four
a 1.0 1 10.0 11.0
b 2.0 2 20.0 22.0
c 3.0 3 30.0 33.0
d NaN 4 NaN NaN
列删除
列可以删除或弹出;
- import pandas as pd
- 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 ("Our dataframe is:")
- print(df)
- print('\n')
- # using del function
- print ("Deleting the first column using DEL function:")
- del df['one']
- print(df)
- print('\n')
- # using pop function
- print ("Deleting column using POP function:")
- df.pop('two')
- print(df)
输出结果 -
Our dataframe is:
one three two
a 1.0 10.0 1
b 2.0 20.0 2
c 3.0 30.0 3
d NaN NaN 4
Deleting the first column using DEL function:
three two
a 10.0 1
b 20.0 2
c 30.0 3
d NaN 4
Deleting column using POP function:
three
a 10.0
b 20.0
c 30.0
d NaN
行选择,添加和删除
行选择
标签选择
可以通过将行标签传递给loc()
函数来选择行。参考以下示例代码 -
- import pandas as pd
- 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'])
输出结果:
one 2.0
two 2.0
Name: b, dtype: float64
结果是一系列标签作为DataFrame
的列名称。 而且,系列的名称是检索的标签。
按整数位置选择
可以通过将整数位置传递给iloc()
函数来选择行。参考以下示例代码 -
- import pandas as pd
- 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[])
输出结果:
one 3.0
two 3.0
Name: c, dtype: float64
行切片
可以使用:
运算符选择多行。参考以下示例代码 -
- import pandas as pd
- 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])
输出结果:
one two
c 3.0 3
d NaN 4
附加行
使用append()
函数将新行添加到DataFrame。 此功能将附加行结束。
- import pandas as pd
- 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)
输出结果:
a b
0 1 2
1 3 4
0 5 6
1 7 8
删除行
使用索引标签从DataFrame中删除或删除行。 如果标签重复,则会删除多行。
- import pandas as pd
- df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
- print(df)
- print('\n')
- df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
- print(df2)
- print('\n')
- df = df.append(df2)
- print(df)
- print('\n')
- # Drop rows with label 0
- df = df.drop(0)
- 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
在上面的例子中,一共有两行被删除,因为这两行包含相同的标签0
。
Pandas | 03 DataFrame 数据帧的更多相关文章
- [Pandas] 03 - DataFrame
DataFrame 表格基本操作 初始化 一并设置 index & columns 类似于倒排表,column相当于words. index就是doc id. df = pd.DataFram ...
- python 数据处理学习pandas之DataFrame
请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来 ...
- Pandas之Dataframe叠加,排序,统计,重新设置索引
Pandas之Dataframe索引,排序,统计,重新设置索引 一:叠加 import pandas as pd a_list = [df1,df2,df3] add_data = pd.concat ...
- pandas中DataFrame对象to_csv()方法中的encoding参数
当使用pd.read_csv()方法读取csv格式文件的时候,常常会因为csv文件中带有中文字符而产生字符编码错误,造成读取文件错误,在这个时候,我们可以尝试将pd.read_csv()函数的enco ...
- Python3 Pandas的DataFrame数据的增、删、改、查
Python3 Pandas的DataFrame数据的增.删.改.查 一.DataFrame数据准备 增.删.改.查的方法有很多很多种,这里只展示出常用的几种. 参数inplace默认为False,只 ...
- Python3 Pandas的DataFrame格式数据写入excle文件、json、html、剪贴板、数据库
Python3 Pandas的DataFrame格式数据写入excle文件.json.html.剪贴板.数据库 一.DataFrame格式数据 Pandas是Python下一个开源数据分析的库,它提供 ...
- python. pandas(series,dataframe,index) method test
python. pandas(series,dataframe,index,reindex,csv file read and write) method test import pandas as ...
- pandas取dataframe特定行/列
1. 按列取.按索引/行取.按特定行列取 import numpy as np from pandas import DataFrame import pandas as pd df=DataFram ...
- Pandas中DataFrame修改列名
Pandas中DataFrame修改列名:使用 rename df = pd.read_csv('I:/Papers/consumer/codeandpaper/TmallData/result01- ...
随机推荐
- RabbitMQ心跳检测与掉线重连
1.RabbitMQListener,自定义消息监听器 using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using ...
- 【More Effective C++ 条款4】非必要不提供default constructor
1)default constructor:在没有任何外来信息的情况下将对象初始化 2)但是有些对象如果没有外来信息,就没有办法完成初始化动作,那么这些对象,就没有必要提供default constr ...
- Prometheus 一条告警的触发流程、等待时间
Prometheus 一条告警的触发流程.等待时间 报警处理流程如下:1. Prometheus Server监控目标主机上暴露的http接口(这里假设接口A),通过上述Promethes配置的'sc ...
- pack URI
WPF使用pack URI语法寻找资源. URI负责搜索如下位置的资源: 当前程序集 引用的程序集 相对于程序集的某个位置 应用程序的源站点 pack URI的格式:pack://机构/路径 机构指定 ...
- C#实现高性能高并发Socket服务器
1.高并发服务器实现一 本文转载 转载地址 2.高并发服务器实现二 本文转载 转载内容在于学习C#实现的高并发服务器 以下个人观点 1 需要注意SocketAsyncEventArgs的使用 2 做到 ...
- Winform中实现ZedGraph不显示y=0这条刻度线
场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- 设计模式之(九)桥接模式(Bridge)
桥接模式是怎么诞生的呢?来看一个场景. 一个软件企业开发一套系统,要兼容所有的不同类型硬件和和各种操作系统.不同种类硬件主要是 电脑.平板电脑.手机.各种操作系统是苹果系统.windows 系统.Li ...
- 性能测试-MySQL性能查看(转)
mysql查看数据库性能常用命令 mysql> show global status; 可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句: mysql> sh ...
- stdin,stdout 和 STDOUT_FILENO,STDIN_FILENO
stdin,stdout 等类型为 FILE *. STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO 等类型为 int. 使用 FILE * 的函数主要有:fopen. ...
- Linux shell之重定向输入,输出
shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕返回给用户.这种对话方式可以是交互的方式(从键盘输入命令 ...