python数据处理模块pandas_Python 数据处理扩展包: pandas 模块的DataFrame介绍(创建和基本操作)...
DataFrame可被视为Pandas中的一个表结构数据存储单元。该存储单元由三个关键组成部分构成:列标题(即字段名称),数据内容(以二维矩阵的形式呈现),以及行标识(每个记录都有唯一标识符)。
一、DataFrame的创建
有多种方式可以创建DataFrame,下面举例介绍。
例1: 通过list创建
import pandas as pd
df = pd.DataFrame([[1,2,3],[4,5,6]])
df
0 1 2
0 1 2 3
1 4 5 6
[2 rows x 3 columns]
这一行为表明该系统在表单设计阶段采用了简明的数据结构策略:构造了一个包含2行3列单元格的表格,并仅定义了单元格内容(通过嵌套列表),未设置列标题和索引号。
这时列名就自动为 0,1,2 ;索引自动为数值0,1.
我们可以指定列表和索引,如:
df = pd.DataFrame([[1,2,3],[4,5,6]],index=['row1','row2'],columns=['c1','c2','c3'])
df
c1 c2 c3
row1 1 2 3
row2 4 5 6
[2 rows x 3 columns]
可以看出,上面代码通过index和 columns参数指定了索引和列名。
例2:创建例子
import numpy as np
dates = pd.date_range('',periods=6)
df = pd.DataFrame(np.random.randn(6,4) , index = dates,columns=list('abcd'))
df
a b c d
2012-10-01 -0.236220 0.586985 0.784953 -0.507129
2012-10-02 -1.020807 -1.316997 -0.747997 1.909333
2012-10-03 0.085208 -0.281736 1.112287 1.572577
2012-10-04 0.008708 -0.925711 -0.615752 -1.183397
2012-10-05 1.158198 -1.393678 0.586624 0.202499
2012-10-06 1.149878 -2.383863 1.646403 1.647935
[6 rows x 4 columns]
由上面代码创建的dates是一个时间索引,使用 np.random.randn 函数生成一个6行4列的随机数矩阵。
该数据框以日期字段为索引,并通过 np.random.randn 方法生成的内容构成;同时该数据框的列名为列表 'abcd'。
二、 DataFrame的一些基本操作
1、获取数据的行数
len(df)
或
len(df.index)
2、显示索引、列和底层的numpy数据
df.index
[2012-10-01, ..., 2012-10-06]
Length: 6, Freq: D, Timezone: None
df.columns
Index([u'a', u'b', u'c', u'd'], dtype='object')
df.values
array([[-0.2362202 , 0.58698529, 0.78495289, -0.50712897],
[-1.02080723, -1.31699704, -0.74799734, 1.90933343],
[ 0.08520807, -0.28173589, 1.11228743, 1.57257716],
[ 0.00870768, -0.92571109, -0.6157519 , -1.18339719],
[ 1.15819829, -1.39367835, 0.586624 , 0.20249899],
[ 1.14987847, -2.38386297, 1.64640287, 1.64793523]])
说明,这个例子中的df使用的是上面创建的 DataFrame对象
3、显示数据
df.head([n]) # 获取df中的前n行数据,n不指定,则默认为5
df.tail([n]) # 获取df中的后n行数据,n不指定,则默认为5
dates = pd.date_range('',periods=100)
df = pd.DataFrame(np.random.randn(100,4) , index = dates,columns=list('abcd' ))
df.head()
a b c d
2012-10-01 -1.010746 0.176277 -0.838870 0.742626
2012-10-02 0.111174 0.182840 0.193215 1.517350
2012-10-03 -0.757385 1.137521 -0.247181 0.659187
2012-10-04 -1.157838 1.464957 -2.106226 1.160796
2012-10-05 0.141747 0.032917 0.647210 -0.861413
[5 rows x 4 columns]
df.tail()
a b c d
2013-01-04 -0.225416 -1.436526 -0.349813 -0.130948
2013-01-05 -1.544653 -0.214760 1.455662 0.050591
2013-01-06 0.582737 -0.646163 -1.763772 -1.463706
2013-01-07 -0.694467 0.710954 -2.227337 -0.257376
2013-01-08 0.282839 -1.100346 1.526374 1.658781
注意,head 和 tail 返回的是一个新的dataframe,与原来的无关
4、按照索引排序
newdf = df.sort_index(ascending=False,inplace=True)
参数设置为 ascending=False 时将按照索引值进行降序排列,默认采用升序顺序
默认参数设置为True时,默认情况下该操作会立即对df中的数据进行排序,并且对应的函数返回值将设为空;同时,在这种情况下对应的newdf变量也将设为空。
如果未将参数设置为True(默认情况下设为False),就不会修改df中的数据,并将返回一个新的df。此时newdf将包含内容,并且是一个经过排序的新df。
5、添加数据(append方法)
该函数能够将数据追加至一个 dataframe 中,请注意使用 append 方法时并不会修改原始 dataframe 的内容而是生成一个新的 dataframe
语法:
DataFrame.append(otherData, ignore_index=False, verify_integrity=False)
其中otherData参数是要添加的新数据,支持多种格式。
ignore_index 参数默认设置为False意味着当该参数被设置为True时,默认情况下不会重新索引新生成的数据框,并且会保留原有数据框的索引。
verify_integrity这个属性设置为False,默认情况下会被忽略,在启用验证功能时(即当ignore_index设置为False时),系统将对新增数据进行索引冲突检测;若发生冲突将导致报错
举例说明1:
dates = pd.date_range('',periods=10)
df = pd.DataFrame(np.random.randn(10,4) , index = dates,columns=list('abcd'))
dates1 = pd.date_range('',periods=2)
df1 = pd.DataFrame(np.random.randn(2,4) , index = dates1,columns=list('abcd'))
df.insert(df1) # 将新增的数据集中的两行信息整合进现有数据表中,并且生成的新数据框架继承了原始数据的所有索引信息
df.add(df1, reset_index=False) # 新增的这两行数据将被添加到df中,并且新生成的df将具有其索引被重新自动设置
使用append方法将数据框 df1 添加到数据框 df 中,并设置 verify_integrity 参数为 True;这会导致运行时错误;由于 df1 与 df2 的索引存在冲突。
注释:df1的数据框列名必须与df的数据框列名保持一致。而不会仅仅是添加行。相反地,则是不仅会新增列属性还会增加新的数据行。
举例2:
df.append({'a':10,'b':11,'c':12,'d':13},ignore_index=True)
a b c d
0 -0.471061 -0.937725 -1.444073 0.640439
1 -0.732039 -1.617755 0.281875 1.179076
2 1.115559 0.136407 -2.225551 0.119433
3 0.695137 0.380088 -0.318689 -0.048248
4 1.483151 -0.124202 -0.722126 0.035601
5 0.326048 -0.139576 -0.172726 0.931670
6 0.858305 0.857661 -0.279078 0.583740
7 -0.041902 0.408085 -1.019313 0.005968
8 0.626730 0.143332 -0.404894 0.377950
9 -1.850168 0.430794 -0.534981 -0.738701
10 10.000000 11.000000 12.000000 13.000000
在当前的代码中,在新生成的df对象上执行此操作后会新增一条记录。为了实现这一目标,请确保将ignore_index参数设置为True以避免运行时错误的发生。
举例3:
df.append({'e':10},ignore_index=True)
a b c d e
0 -0.471061 -0.937725 -1.444073 0.640439 NaN
1 -0.732039 -1.617755 0.281875 1.179076 NaN
2 1.115559 0.136407 -2.225551 0.119433 NaN
3 0.695137 0.380088 -0.318689 -0.048248 NaN
4 1.483151 -0.124202 -0.722126 0.035601 NaN
5 0.326048 -0.139576 -0.172726 0.931670 NaN
6 0.858305 0.857661 -0.279078 0.583740 NaN
7 -0.041902 0.408085 -1.019313 0.005968 NaN
8 0.626730 0.143332 -0.404894 0.377950 NaN
9 -1.850168 0.430794 -0.534981 -0.738701 NaN
10 NaN NaN NaN NaN 10
可以看到,在插入数据时(特别是当试图为指定字段名创建新的DataFrame时),如果该字段名未被定义,则会导致新增行的同时也会新增一个新列。
6、遍历数据
示例代码如下
for index,row in df.iterrows():
print index #获取行的索引
print row.a #根据列名获取字段
print row[0]#根据列的序号(从0开始)获取字段
7、查找数据
创建如下的dataframe
dates = pd.date_range('20121001',periods=10)
df = pd.DataFrame(np.random.randn(10,4) , index = dates,columns=list('abcd'))
可以有各种方式获取df中的全部或部分数据
通过列名定位指定数据列 #在Pandas中使用df['a']时,默认会通过列名定位指定数据列;结果返回一个Series对象(Series),其键为索引;其值对应于该列中的字段值
df[:2] #获取前2行数据,效果等同 df[0:2],返回的是一个新的dataframe
df[2:5] #获取第3行~5行 这3条记录,返回的是一个新的dataframe
df.loc['20121009'] #通过指定索引定位某一行 #等同于 df.loc['2012-10-09'] #即通过指定日期定位某一行# 返回的是一个Series对象 #其键为列名 #每个值对应该列的字段内容
df.iloc[3] #获取指定序号的行,这里是第4行
8、删除数据
del df['a'] # 删除dataframe中指定的列;请注意,del是Python中的内置语句,并非函数;该操作不会返回任何值
df.drop(['a'], axis=1) # 移除特定的列, 与之前的主要区别在于该方法不会对原有数据框产生任何改变, 而dop方法将生成一个新的数据框,在其中已移除了指定的列.
说明:该DOP方法既能删除列也能删除行;然而,在这种情况下(即当创建df时),它无法被用来进行行的删除操作;相反地,在下面给出的例子中,则可以通过这种方式实现对数据框的操作
data被赋值为一个pandas数据框,
其构建自numpy模块中的arange函数生成的16个数值,
按照(4, 4)的形状进行重排,
并设置索引参数为['Ohio'、'Colorado'、'Utah'、'New York'],
列参数设定为['one'、'two'、'three'、'four']。
data.drop(['Colorado', 'Ohio'])
该dop方法去除指定索引位置的两个记录。
需要注意的是,在处理列时类似的做法是,
drop操作不会修改原始的数据框,
而是返回一个新的数据框进行操作。
9、增加列
例子代码如下
dates = pd.date_range('',periods=10)
df = pd.DataFrame(np.random.randn(10,3) , index = dates,columns=list('abc'))
df['d'] = pd.Series(np.random.randn(10),index=df.index)
该段代码首先生成了一个dataframe,并随后在df中新增了一列,并命名为'd'。若指定的字段已存在,则会将相应的内容更新到该字段。
10、修改指定行或单元格数据
df.values[i][j]= xxx #其中i是行号,j是列号,都是从0开始
df.values[1]=12 # 该代码将对某一行的所有列赋值给同一个数值(此处使用的是索引值),其中参数1代表的是序列号,并且此处指代的是第二行的数据
df['a'] = 12 # 这会将该列的所有数据统一设置为同一数值(例如这里的数值12)。需要注意的是,在这种情况下(即当指定的列名不存在时),该代码会自动创建一个新的列
11、插入行
之前介绍过的方法中提到的append函数是用来创建一个新的 dataframe,并不修改原有的dataframe
是否有办法可以在当前的frame中直接插入一行数据? 上面提到的方法df[列名] = xxx 用于插入或更新列的数据。
Python 数据处理扩展包: numpy 和 pandas 模块介绍
一、NumPy模块(Numeric Python)是一种用于数值计算的开源工具。它能够高效地存储和处理大型矩阵数据,并具有比嵌套列表更强的优势。
在Python编程语言中,数据处理扩展包中的pandas模块提供了关于DataFrame的知识介绍。该模块的核心功能包括对存储和操作数据库的实现
从表格中提取数据,并提供以下示例:import MySQLdbtry: conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='root...',db='test')]【def process_data(data): process the input data if it is a list: perform specific operations on each element; else: apply general processing steps to the entire dataset
吴裕雄--天生自然python学习笔记:pandas模块删除 DataFrame 数据
Pandas 的 drop 函数用于从 DataFrarne 删除数据。其语法如下:例如,在Python环境中运行以下代码可实现这一操作:导入 pandas 库并赋值为 pd;初始化一个包含成绩的数据结构。
吴裕雄--系统化 Python 学习指南:基于 pandas 库的数据框定位方法(.loc)实现按照行索引和列标签进行数据提取的技术
要想用df.values读取数据,则需要明确学生及其相关科目的位置这一前提条件显得繁琐。相比之下,df.loc可以直接通过行索引和列标题来定位所需的数据,并且使用起来更加便捷。其语法定义为:通过指定行索引或列标签来确定所需的数据单元格。
Python进阶(十一)----包,logging模块
Python进阶(十一)——包与logging模块 —— 一、包的使用
什么是包:在Python中,默认情况下,默认情况下将所有模块按层次结构组织在一个特定的位置中。
通俗来说,在技术实现的角度来看,在大多数编程环境中,默认情况下,默认情况下默认情况下每个独立的应用程序或项目都包含一个__init__.py文件。
关于python中的包,模块导入的问题详解(一)
为了更好地掌握Python编程中关于包及模块导入的相关知识,在学习过程中对相关资料进行了系统性的搜集与查阅,并在此基础上形成了一定的理解。(一)以案例分析的方式展开探讨:以案例分析的方式展开探讨。以案例分析的方式展开探讨。以案例分析的方式展开探讨。以案例分析的方式展开探讨。
Python之扩展包安装
读者朋友们,在Python 2.7.9及以上或Python 3.4及以上版本中,默认情况下已经安装了pip或easy_install扩展包(可以通过检查$PYTHONPATH环境变量来确认)。
Python学习 之 包和模块
1.rpm -ql python #获取Python在计算机中的安装信息
2. 一个模块是可以通过导入的方式运行的一个Python脚本文件;一个包则是一系列按目录组织起来的一组模块和子包,并且每个包都会有一个位于其目录下的__init__.py文件来存储该包的相关信息
Python和C++的混合编程(使用Boost编写Python的扩展包)
为了追求编写编程代码时能带来身心愉悦体验的最佳选择是脚本语言。对于追求代码运行效率与思维敏捷性的人来说,C++堪称完美无缺的语言。为了更好地发挥C++的强大功能,我一直致力于将其优势整合到多种通用型或专业型脚本语言中。最初撰写的一篇文章虽然不够完善,但也为后续学习提供了宝贵的经验基础。
随机推荐
初始Bootstrap
参考案例①获取Bootstrap框架下载地址:http://v3.bootcss.com/getting-started/#download
使用MacBook Air的4项基本技巧
在笔记本电脑领域中,MacBook Air无与伦比,在性能方面同样表现出众。它不仅续航时间出色而且机身轻盈。凭借其极简的设计理念与卓越的功能配置,在当前市场中找不到任何对手。对于已经拥有多款MacBook Air系列设备的用户来说,不妨考虑升级至最新版本以享受更多创新功能带来的全新体验
关于alpha透明度
使用场景 是指在一个具有不透明度的容器上放置了一些标签 当调整该容器的透明度时 发现其标签也同样受到影响 实际上这样的做法可能过于复杂 对于你们的人来说 只需要提供一个颜色值就足够了
数据库字段类型中char和Varchar区别
Char字段类型:使用1字节表示ASCII字符、2字节表示每个汉字。Char字段适合存储固定长度的数据较为便捷。Char字段上的索引效率较高;例如定义Char(10)时,则无论你如何操作该字段都不会超出其最大长度限制。
android手机操作SD的使用方法
将数据写入SD卡 package com.example.openfileproject; 导入java.io包中的File类;以及相关的其他类;
Html在线编辑器--基于Jquery的xhEditor轻量级编辑器
访问xhEditor V1.2.2版本的下载页面,请您访问开源中国社区获取该软件的获取途径:http://www.oschina.net/p/xheditor。该软件采用jQuery技术构建而成,在设计上既简洁又功能强大,并提供高效的XHTML 1.0过渡展示功能。
Luogu P1596 [USACO10OCT]湖计数Lake Counting
Following recent rainstorms, water has accumulated in multiple locations within Farmer John's field, where the land is often used for farming purposes. This accumulation is denoted by the variable X.
设置IIS7/IIS7.5的FTP支持断点续传
Windows Server 2019及其以上版本中的IIS服务器在默认配置下具备断点续传功能;然而,在某些较低版本如Windows Server 16或以下,默认情况下该功能可能被禁用或不再支持;因此,在进行网络传输时需要特别注意配置以确保数据传输过程中的中断恢复能力;从而更有效地利用有限的硬件资源
JavaScript getter和setter
对象的属性由属性名name、值key以及其他特性(如可读写性writable、可枚举性enumerable和可配置性configurable)构成。自ES6及以上版本引入了基于[[ emblem|Object.prototype]]接口提供的[[ getter ]]和[[ setter ]]方法。
ios开关按钮
.al-toggle-button{ appearance: none; -webkit-appearance: none; position: relative; width: 52px; height: auto; border-radius: 4px; background-color: transparent; margin-top: auto; transition: background-color 0.2s ease-in-out; box-shadow: 0 1px 3px rgba(0,0,0,0.1); overflow-hidden; cursor:pointer; padding-bottom: 8px;}
