
- 外文名
- pandas
- 开发与维护
- PyData开发组
- 用 途
- Python数据分析模块
- 起 源
- AQR Capital Management
-
Pandas
2019-04-11 22:20:281:什么是pandas 定义:Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。 作用:numpy能够帮助我们处理数值,但是...1:什么是pandas
定义:Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
作用:numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于bumpy),还能够帮助我们处理其他类型数据。
2:pandas的常用数据类型
- Series 一维,带标签数组
- DataFrame 二维,Series容器
pd.Series([1,2,3,4], index=list('asdf')) temp_dict = {'name': 'xiaohong', 'age': 18, 'tel':10086} temp = pd.Series(temp_dict) print(temp)
3:Series的切片和索引
Series对象本质上由两个数组构成,一个数组构成对象的键(index,索引),一个数组构成对象的值(values), 键->值
ndarray的很多方法都可以运用于series类型,例如:argmax, clip,series也有where方法,但是结果跟ndarray不同。
t1 = pd.Series([1,2,3,4], index=list('asdf')) # temp_dict = temp_dict = {'name': 'xiaohong', 'age': 18, 'tel':10086} t2 = pd.Series(temp_dict) print(t2) print(t1[1]) print(t1[0:]) print(t1[[1, 3]]) print(t2['age']) print(t2[['age', 'tel']]) print(t2[[1, 2]]) # 当按照键取值没有的话会是NAN print(t1.index) # index类型可迭代 Index(['a', 's', 'd', 'f'], dtype='object') list(t1.index) print(type(t1.index), len(t1.index)) # <class 'pandas.core.indexes.base.Index'> 4 print(t1.values) # [1 2 3 4] object类型 print(type(t1.values)) # <class 'numpy.ndarray'>
-
Pandas的Apply函数——Pandas中最好用的函数
2018-02-22 18:22:04Pandas最好用的函数 Pandas是Python语言中非常好用的一种数据结构包, 包含了许多有用的数据操作方法。而且很多算法相关的库函数的输入数据结构都要求是pandas数据,或者有该数据的接口。 仔细看pandas的API...Pandas最好用的函数
Pandas是
Python
语言中非常好用的一种数据结构包,包含了许多有用的数据操作方法。而且很多算法相关的库函数的输入数据结构都要求是pandas
数据,或者有该数据的接口。仔细看pandas的API说明文档,就会发现有好多有用的函数,比如非常常用的文件的读写函数就包括如下函数:
Format Type Data Description Reader Writer text CSV read_csv to_csv text JSON read_json to_json text HTML read_html to_html text Local clipboard read_clipboard to_clipboard binary MS Excel read_excel to_excel binary HDF5 Format read_hdf to_hdf binary Feather Format read_feather to_feather binary Parquet Format read_parquet to_parquet binary Msgpack read_msgpack to_msgpack binary Stata read_stata to_stata binary SAS read_sas binary Python Pickle Format read_pickle to_pickle SQL SQL read_sql to_sql SQL Google Big Query read_gbq to_gbq 读取数据后,对于数据处理来说,有好多有用的相关操作的函数,但是我认为其中最好用的函数是下面这个函数:
apply函数
apply函数是`pandas`里面所有函数中自由度最高的函数。该函数如下:DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)
该函数最有用的是第一个参数,这个参数是函数,相当于
C/C++
的函数指针。这个函数需要自己实现,函数的传入参数根据
axis
来定,比如axis = 1
,就会把一行数据作为Series
的数据结构传入给自己实现的函数中,我们在函数中实现对Series
不同属性之间的计算,返回一个结果,则apply
函数会自动遍历每一行DataFrame
的数据,最后将所有结果组合成一个Series
数据结构并返回。比如读取一个表格:
假如我们想要得到表格中的PublishedTime
和ReceivedTime
属性之间的时间差数据,就可以使用下面的函数来实现:import pandas as pd import datetime #用来计算日期差的包 def dataInterval(data1,data2): d1 = datetime.datetime.strptime(data1, '%Y-%m-%d') d2 = datetime.datetime.strptime(data2, '%Y-%m-%d') delta = d1 - d2 return delta.days def getInterval(arrLike): #用来计算日期间隔天数的调用的函数 PublishedTime = arrLike['PublishedTime'] ReceivedTime = arrLike['ReceivedTime'] # print(PublishedTime.strip(),ReceivedTime.strip()) days = dataInterval(PublishedTime.strip(),ReceivedTime.strip()) #注意去掉两端空白 return days if __name__ == '__main__': fileName = "NS_new.xls"; df = pd.read_excel(fileName) df['TimeInterval'] = df.apply(getInterval , axis = 1)
有时候,我们想给自己实现的函数传递参数,就可以用的
apply
函数的*args
和**kwds
参数,比如同样的时间差函数,我希望自己传递时间差的标签,这样没次标签更改就不用修改自己实现的函数了,实现代码如下:import pandas as pd import datetime #用来计算日期差的包 def dataInterval(data1,data2): d1 = datetime.datetime.strptime(data1, '%Y-%m-%d') d2 = datetime.datetime.strptime(data2, '%Y-%m-%d') delta = d1 - d2 return delta.days def getInterval_new(arrLike,before,after): #用来计算日期间隔天数的调用的函数 before = arrLike[before] after = arrLike[after] # print(PublishedTime.strip(),ReceivedTime.strip()) days = dataInterval(after.strip(),before.strip()) #注意去掉两端空白 return days if __name__ == '__main__': fileName = "NS_new.xls"; df = pd.read_excel(fileName) df['TimeInterval'] = df.apply(getInterval_new , axis = 1, args = ('ReceivedTime','PublishedTime')) #调用方式一 #下面的调用方式等价于上面的调用方式 df['TimeInterval'] = df.apply(getInterval_new , axis = 1, **{'before':'ReceivedTime','after':'PublishedTime'}) #调用方式二 #下面的调用方式等价于上面的调用方式 df['TimeInterval'] = df.apply(getInterval_new , axis = 1, before='ReceivedTime',after='PublishedTime') #调用方式三
修改后的
getInterval_new
函数多了两个参数,这样我们在使用apply
函数的时候要自己传递参数,代码中显示的三种传递方式都行。最后,本篇的全部代码在下面这个网页可以下载:
https://github.com/Dongzhixiao/Python_Exercise/tree/master/pandas_apply
-
pandas DataFrame数据转为list
2017-05-21 22:46:10首先使用np.array()函数把DataFrame转化为np.ndarray(),再利用tolist()函数把np.ndarray()转为list,示例代码如下:# -*- coding:...import pandas as pddata_x = pd.read_csv("E:/Tianchi/result/features.csv",useco首先使用np.array()函数把DataFrame转化为np.ndarray(),再利用tolist()函数把np.ndarray()转为list,示例代码如下:
# -*- coding:utf-8-*- import numpy as np import pandas as pd data_x = pd.read_csv("E:/Tianchi/result/features.csv",usecols=[2,3,4])#pd.dataframe data_y = pd.read_csv("E:/Tianchi/result/features.csv",usecols=[5]) train_data = np.array(data_x)#np.ndarray() train_x_list=train_data.tolist()#list print(train_x_list) print(type(train_x_list))
-
pandas小记:pandas数据输入输出
2016-08-15 10:12:28输出格式控制 pandas dataframe数据全部输出,数据太多也不用省略号表示。 pd.set_option('display.max_columns',None) 或者 with option_context('display.max_rows', 10, 'dis...http://blog.csdn.net/pipisorry/article/details/52208727
输出格式控制
pandas dataframe数据全部输出,数据太多也不用省略号表示。
pd.set_option('display.max_columns',None)
或者with option_context('display.max_rows', 10, 'display.max_columns', 5):
数据输入输出
数据pickling
pandas数据pickling比保存和读取csv文件要快2-3倍(lz测试不准,差不多这么多)。
ltu_df.to_pickle(os.path.join(CWD, 'middlewares/ltu_df'))
ltu_df = pd.read_pickle(os.path.join(CWD, 'middlewares/ltu_df'))
不过lz测试了一下,还是直接pickle比较快,比pd.read_pickle快2倍左右。
pickle.dump(ltu_df, open(os.path.join(CWD, 'middlewares/ltu_df.pkl'), 'wb'))
ltu_df = pickle.load(open(os.path.join(CWD, 'middlewares/ltu_df.pkl'), 'rb'))
CSV
通常来说,数据是CSV格式,就算不是,至少也可以转换成CSV格式。
读取csv文件 read_csv
lines = pd.read_csv(filename, sep='\t', header=None,names=col_names, parse_dates=[1], skip_blank_lines=True, index_col=0).reset_index()
dateparse = lambda dates: pd.datetime.strptime(dates, '%Y-%m')
data = pd.read_csv('AirPassengers.csv', parse_dates='Month', index_col='Month',date_parser=dateparse)参数:
filepath_or_buffer : str,pathlib。str, pathlib.Path, py._path.local.LocalPath or any object with a read() method (such as a file handle or StringIO). 可以是URL,可用URL类型包括:http, ftp, s3和文件。本地文件读取实例:/localhost/path/to/table.csv.
sep : str, default ‘,’.指定分隔符。如果不指定参数,则会尝试使用逗号分隔。分隔符长于一个字符并且不是‘\s+’,将使用python的语法分析器,并且忽略数据中的逗号。正则表达式例子:'\r\t'。
skiprows=2,表示前面两行[0, 1]都不读入,等价于skiprows=[0, 1];
nrows int, default
None.
Number of rows of file to read. Useful for reading pieces of large files.header=None第0行不作为列名;
names=[''] 指定列名;
parse_dates=[] 解析指定行为date类型;
dtype : Type name or dict of column -> type, default None 每列数据的数据类型。例如 dtype={'a': np.float64, 'b': np.int32}或者dtype=str。
encoding : str, default None指定字符集类型,通常指定为'utf-8'. List of Python standard encodings。
index_col=0 指定某列为行索引,否则自动索引0, 1, .....。reset_index()是其反操作。
quoting : int or csv.QUOTE_* instance, default 0. Control field quoting behavior per csv.QUOTE_* constants. Use one of QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3). 控制csv中的引号常量。文本引入标志符,默认为双引号,若读取的数据中包含双引号,则需要在函数中写入这个参数,quoting=3,3代表None,即无文本引入标志符,否则将会出现读取串行现象。如果报错:pandas.errors.ParserError: Error tokenizing data. C error: EOF inside string starting at row,需要设置 import csv 参数加上quoting=csv.QUOTE_NONE。
lineterminator : str (length 1), default None 行分割符,只在C解析器下使用。如果报错:pandas.errors.ParserError: Error tokenizing data. C error: Buffer overflow caught - possible malformed input file. 解决:the cause was that there were some carriage returns "\r" in the data that pandas was using as a line terminator as if it was "\n". I thought I'd post here as that might be a common reason this error might come up.The solution I found was to add lineterminator='\n' into the read_csv function。
doublequote : boolean, default True. 双引号,当单引号已经被定义,并且quoting 参数不是QUOTE_NONE的时候,使用双引号表示引号内的元素作为一个元素使用。
escapechar : str (length 1), default None. 当quoting 为QUOTE_NONE时,指定一个字符使的不受分隔符限值。
error_bad_lines: 默认为True,如果想要跳过出错的行,继续向下读取,可将其设为False。
parse_dates:这是指定含有时间数据信息的列。正如上面所说的,列的名称为“月份”。
index_col:使用pandas 的时间序列数据背后的关键思想是:目录成为描述时间数据信息的变量。所以该参数告诉pandas使用“月份”的列作为索引。
date_parser:指定将输入的字符串转换为可变的时间数据。Pandas默认的数据读取格式是‘YYYY-MM-DD HH:MM:SS’。如需要读取的数据没有默认的格式,就要人工定义。这和dataparse的功能部分相似,这里的定义可以为这一目的服务。[python模块 - 时间模块 ]converters : dict, default None: Dict of functions for converting values in certain columns. Keys can eitherbe integers or column labels.将数据某列按特定函数转化,必然可以取代自定义时date_parser和parse_dates两个参数呀。
如解析时间时想返回时间戳的浮点数表示时:def dateParse(s): return float(__import__('datetime').datetime.timestamp(__import__('dateutil.parser').parser.parse(s)))
df = pd.read_csv(os.path.join(CA_DATASET_DIR, checkin_ca), header=0, sep='\t', converters={'Time(GMT)': dateParse})
Note: 读取速度比numpy.loadtxt快多了,近10倍,包括转换成list的时间。
# Reading data from web
data_url="https://raw.githubusercontent.com/alstat/Analysis-with-Programming/master/2014/Python/Numerical-Descriptions-of-the-Data/data.csv"
df =pd.read_csv(data_url)
写入csv文件Writing to a csv file
header: Whether to write out the column names (default True)
data_df.to_csv(path,index=False, sep='\t', header=True, encoding='utf-8')
Note:
1 在参数中加上index=False,否则写入的数据会默认加上index,大多数是没有用的。
2 不用header时的设置header=False。
Excel
好像如果使用pd.read_excel要安装xlrd:pip install xlrd
Reading from an excel file
pandas.
read_excel(
io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)参数:converters:读数据的时候使用converters指定列数据的数值类型 pd.read_excel('a.xlsx',converters={0: str})。
sheet_name: None就是读取所有的sheet,返回的就是一个ordereddict;指定就只读取指定sheet,只有一个返回的就是dataframe。
header:指定header所在列 (0开始)。
只读1页返回df
df = pd.read_excel(file_name, sheet_name="Sheet2", names=['col1', 'col2'], header=None, dtype=object)
读所有页返回dict
data_df_dict = pd.read_excel(filename, sheet_name=None, header=0)
data_df = pd.concat(data_df_dict.values())
Writing to an excel file
df.to_excel('a.xlsx', index=False, sheet_name='Sheet1')
HDF5
Reading and writing to HDFStores
Writing to a HDF5 Store
In [138]: df.to_hdf('foo.h5','df')
Reading from a HDF5 Store
In [139]: pd.read_hdf('foo.h5','df') Out[139]: A B C D 2000-01-01 0.266457 -0.399641 -0.219582 1.186860 2000-01-02 -1.170732 -0.345873 1.653061 -0.282953 ... ... ... ... ... 2002-09-25 -10.216020 -9.480682 -3.933802 29.758560 2002-09-26 -11.856774 -10.671012 -3.216025 29.369368 [1000 rows x 4 columns]
Gotchas
If you are trying an operation and you see an exception like:
>>> if pd.Series([False, True, False]): print("I was true") Traceback ... ValueError: The truth value of an array is ambiguous. Use a.empty, a.any() or a.all().
See Comparisons for an explanation and what to do.
See Gotchas as well.
from: http://blog.csdn.net/pipisorry/article/details/52208727
ref: [pandas输入输出官网IO Tools (Text, CSV, HDF5, ...)¶]
-
【Python】Pandas 的 apply 函数使用示例
2016-11-03 11:25:42apply 是 pandas 库的一个很重要的函数,多和 groupby 函数一起用,也可以直接用于 DataFrame 和 Series 对象。主要用于数据聚合运算,可以很方便的对分组进行现有的运算和自定义的运算。 数据集 使用的数据... -
pandas.DataFrame删除/选取含有特定数值的行或列
2018-06-20 09:13:59import pandas as pd import numpy as np a=np.array([[1,2,3],[4,5,6],[7,8,9]]) df1=pd.DataFrame(a,index=['row0','row1','row2'],columns=list('ABC')) print(df1) df2=df1.copy() #删除/选取... -
pandas apply() 函数用法
2019-08-22 10:00:46理解 pandas 的函数,要对函数式编程有一定的概念和理解。函数式编程,包括函数式编程思维,当然是一个很复杂的话题,但对今天介绍的 apply() 函数,只需要理解:函数作为一个对象,能作为参数传递给其它参数,并且... -
pandas小记:pandas高级功能
2016-12-06 15:44:59面板数据{pandas数据结构有一维Series,二维DataFrame,这是三维Panel}pandas有一个Panel数据结构,可以将其看做一个三维版的,可以用一个由DataFrame对象组成的字典或一个三维ndarray来创建 -
Pandas-排序函数sort_values()
2018-10-18 22:21:33pandas中的sort_values()函数类似于SQL中order by的原理,可以将数据集依照某个字段中的数据进行排序。 二、sort_values()函数的具体参数 用法: DataFrame.sort_values(by=‘##’,axis=0,ascending=True, in... -
Python中pandas dataframe删除一行或一列:drop函数
2018-02-10 20:10:25用法:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False) 在这里默认:axis=0,指删除index,因此删除columns时要指定axis=1; inplace=False,默认该删除操作不改变原数据,而是返回... -
Pandas对每个分组应用apply函数
2020-05-01 16:02:57Pandas对每个分组应用apply函数Pandas的apply函数概念(图解)实例1:怎样对数值按分组的归一化实例2:怎样取每个分组的TOPN数据 Pandas的apply函数概念(图解) 实例1:怎样对数值按分组的归一化 实例2:... -
Python利用pandas处理Excel数据的应用
2019-04-16 20:06:42最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做自动化测试的时候,如果涉及到数据的读取和存储,那么而利用pandas就... -
[Python3]pandas.merge用法详解
2019-06-06 08:42:18pandas提供了一组高级的、灵活的、高效的核心函数,能够轻松的将数据规整化。这节主要对pandas合并数据集的merge函数进行详解。(用过SQL或其他关系型数据库的可能会对这个方法比较熟悉。) 1.merge函数的参数一览表 ... -
pandas之分组groupby()的使用整理与总结
2019-07-27 18:41:53在使用pandas的时候,有些场景需要对数据内部进行分组处理,如一组全校学生成绩的数据,我们想通过班级进行分组,或者再对班级分组后的性别进行分组来进行分析,这时通过pandas下的groupby()函数就可以解决。... -
在Pycharm中安装Pandas库方法(简单易懂)
2019-09-02 17:18:31Python、Anaconda、Pandas以及PyCharm的安装 文章来源:企鹅号 - Michael的笔记本 开发环境的搭建是一件入门比较头疼的事情,在上期的文稿基础上,增加一项Anaconda的安装介绍。Anaconda是Python的一个发行版本,... -
Pandas给DataFrame赋值
2018-06-25 16:12:29Pandas 设置值 相关代码 创建数据 我们可以根据自己的需求, 用 pandas 进行更改数据里面的值, 或者加上一些空的,或者有数值的列. 首先建立了一个 6X4 的矩阵数据。 dates = pd.date_range('20130101', ... -
Pandas DataFrame的基本属性详解
2019-06-24 19:13:33Pandas DataFrame的一些基本属性 基本功能列表 import pandas as pd 导入库 df = pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False) 创建一个DataFrame df.index df.columns df.axes df.T... -
pandas的to_csv()使用方法
2018-01-11 15:31:251.首先查询当前的工作...2.to_csv()是DataFrame类的方法,read_csv()是pandas的方法 dt.to_csv() #默认dt是DataFrame的一个实例,参数解释如下 路径 path_or_buf: A string path to the file to write or -
Py之Pandas:Python的pandas库简介、安装、使用方法详细攻略
2018-04-01 20:53:02Py之Pandas:Python的pandas库简介、安装、使用方法详细攻略 目录 pandas库简介 pandas库安装 pandas库使用方法 1、函数使用方法 2、使用经验总结 3、绘图相关操作 pandas库简介 在 Python 自带... -
在pandas中遍历DataFrame行
2018-02-22 21:54:05有如下 Pandas DataFrame:import pandas as pd inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}] df = pd.DataFrame(inp) print df 上面代码输出: c1 c2 0 10 100 1 11 110 2 12 120 现在... -
Pandas index详解
2017-06-09 09:43:11pandas里对索引的操作主要有 1. DataFrame.rename 2. DataFrame.rename_axis 3. DataFrame.reindex 4. DataFrame.reindex_axis 5. DataFrame.reset_index 6. pandas.Index.reindex 7. pandas.Index.set_names... -
Pandas.DataFrame转置
2019-06-02 22:52:19简述 Motivation sometimes,换一种获取数据的方式,可以提高数据获取的速度。 sometimes,由于预计爬取的数据长度不确定,只能这么先存储起来。...提供了Pandas.DataFrame的行列转置的方法 实验部分... -
Python3 Pandas DataFrame 对某一列求和
2019-04-24 11:50:05Pandas DataFrame 对某一列求和 在操作pandas的DataFrame的时候,常常会遇到某些列是字符串,某一些列是数值的情况,如果直接使用df_obj.apply(sum)往往会出错 使用如下方式即可对其中某一列进行求和 dataf_test1['... -
pandas dataframe 提取行和列
2019-01-11 11:27:09import pandas as pd data = pd.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]}) 提取列 单列 data['a'] 多列 data[['a', 'b']] 使用 .loc或者 .iloc 提取 第一个参数是行,第二个参数为列 .loc为... -
pandas学习(四)--数据的归一化
2017-11-26 20:31:31欢迎加入python学习交流群 667279387 ...pandas学习(五)–pandas学习视频 归一化方法有两种形式,一种是把数变为(0,1)之间的小数,一种是把有量纲表达式变为无量纲表达式。主要是为了数据处理方便提出来的,把数 -
Pandas库
2017-04-30 23:31:53Pandas数据框基本操作(增删改查) Pandas dtypes(数据类型) Pandas 列索引操作 Pandas 索引(index)/选取(select)/标签(label)操作 pandas IO Pandas 缺省值处理 Pandas GroupBy 分组 Pandas.plot 做图 DataFrame ... -
安装pandas
2019-02-14 22:47:53pip install pandas -
Modin.pandas使用多核CPU加速pandas?Modin.pandas可以代替pandas?看看就知道了
2020-05-05 15:32:03modin.pandas 确实能使得一部分函数使用多核cpu进行加速处理,但是现在有些功能还不完善,有些函数还是用的默认pandas处理… 具体哪些函数是可以加速的可以往下看看 主要测试了apply,groupby,read_csv 一、Modin.... -
Python使用pandas读取excel表格数据
2019-04-08 16:14:04import pandas as pd 若使用的是Anaconda集成包则可直接使用,否则可能需要下载:pip install pandas 读取表格并得到表格行列信息 df=pd.read_excel('test.xlsx') height,width = df.shape print(height,width,type... -
python之pandas简单介绍及使用(一)
2019-06-13 11:00:45一、 Pandas简介 1、Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具...
-
实验三_字符串类的使用.pdf
-
重庆大学《算法分析与设计》课程试卷.pdf
-
2021-01-20
-
Django 应用开发 第四节
-
Sqoop增量导入
-
opencv_ffmpeg.dll
-
【数据分析-随到随学】Hive详解
-
Manifest extraction failed: 找不到 Windows 运行时类型“Windows.Data.Json.JsonObject”
-
Lookup查找最后一个价格.xlsx
-
JDK15ReentrantLock原理
-
21年新接口自动化测试视频postman教程 零基础接口测试
-
WPF上位机数据采集与监控系统零基础实战
-
Python笔记
-
海南大学《数据库》知识点总结.pdf
-
gVim知识收集(低频使用)
-
hcie第六天总结
-
【数据分析-随到随学】Spark理论及实战
-
量化高频交易系统tick数据采集
-
【数据分析-随到随学】互联网行业业务指标及行业数
-
2021最新京东、字节跳动「3面面经」盘点大厂后端面试高频题