一、Pandas简介

1、Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。 2、Pandas 是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。
Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。
panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。 3、数据结构:
Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
Time- Series:以时间为索引的Series。
DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。以下的内容主要以DataFrame为主。
Panel :三维的数组,可以理解为DataFrame的容器。
Pandas 有两种自己独有的基本数据结构。读者应该注意的是,它固然有着两种数据结构,因为它依然是 Python 的一个库,所以,Python 中有的数据类型在这里依然适用,也同样还可以使用类自己定义数据类型。
只不过,Pandas 里面又定义了两种数据类型:Series 和 DataFrame,它们让数据操作更简单了。

pandas 基本使用

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt s = pd.Series([1,3,5,np.nan,6,8])
'''
>>> s
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
''' dates = pd.date_range('20180330',periods=6)
'''
DatetimeIndex(['2018-03-30', '2018-03-31', '2018-04-01', '2018-04-02',
'2018-04-03', '2018-04-04'],
dtype='datetime64[ns]', freq='D')
'''
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
'''
A B C D
2018-03-30 1.421753 -0.835878 1.077365 0.407735
2018-03-31 -0.608609 -1.148211 -1.174397 0.108209
2018-04-01 -0.635743 1.759105 0.375025 1.558345
2018-04-02 0.829423 1.506339 0.858323 0.867596
2018-04-03 0.443178 -1.083932 -0.179227 -0.485547
2018-04-04 -0.913496 0.320855 -0.940977 0.877651
'''
df2 = pd.DataFrame({
'A':1,
'B':pd.Timestamp('20130102'),
'C':pd.Series(1,index=list(range(4)),dtype='float32'),
'D':np.array([3]*4,dtype='int32'),
'E':pd.Categorical(['test','train','test','train']),
'F':'foo'})
'''
A B C D E F
0 1 2013-01-02 1.0 3 test foo
1 1 2013-01-02 1.0 3 train foo
2 1 2013-01-02 1.0 3 test foo
3 1 2013-01-02 1.0 3 train foo
'''
print(df2.dtypes)
'''
A int64
B datetime64[ns]
C float32
D int32
E category
F object
dtype: object
'''
'''
>>> df2.head(2) #显示前面2行
A B C D E F
0 1 2013-01-02 1.0 3 test foo
1 1 2013-01-02 1.0 3 train foo
>>> df2.tail(2) #显示后面2行
A B C D E F
2 1 2013-01-02 1.0 3 test foo
3 1 2013-01-02 1.0 3 train foo
>>> df.index
DatetimeIndex(['2018-03-30', '2018-03-31', '2018-04-01', '2018-04-02',
'2018-04-03', '2018-04-04'],
dtype='datetime64[ns]', freq='D')
>>> df.columns
Index(['A', 'B', 'C', 'D'], dtype='object')
>>> df.values
array([[-0.7399801 , 0.63228899, -0.19250377, 1.13034102],
[-1.62267282, 0.26772863, 0.14344581, 0.69354685],
[-1.08605314, -1.02026368, -0.22525268, 1.3305295 ],
[ 0.75133965, -1.15389799, -0.60457632, 1.93324854],
[-1.07516695, -0.52292111, 2.5930546 , -0.69028129],
[ 0.56341006, 0.73365219, 0.52632723, 0.85383304]])
>>> df.describe() #快速计算出数据的统计描述
A B C D
count 6.000000 6.000000 6.000000 6.000000
mean -0.534854 -0.177235 0.373416 0.875203
std 0.967643 0.832719 1.152233 0.880463
min -1.622673 -1.153898 -0.604576 -0.690281
25% -1.083332 -0.895928 -0.217065 0.733618
50% -0.907574 -0.127596 -0.024529 0.992087
75% 0.237563 0.541149 0.430607 1.280482
max 0.751340 0.733652 2.593055 1.933249 >>> df.T #对数据进行转置
2018-03-30 2018-03-31 2018-04-01 2018-04-02 2018-04-03 2018-04-04
A -0.739980 -1.622673 -1.086053 0.751340 -1.075167 0.563410
B 0.632289 0.267729 -1.020264 -1.153898 -0.522921 0.733652
C -0.192504 0.143446 -0.225253 -0.604576 2.593055 0.526327
D 1.130341 0.693547 1.330529 1.933249 -0.690281 0.853833
>>> df
A B C D
2018-03-30 -0.739980 0.632289 -0.192504 1.130341
2018-03-31 -1.622673 0.267729 0.143446 0.693547
2018-04-01 -1.086053 -1.020264 -0.225253 1.330529
2018-04-02 0.751340 -1.153898 -0.604576 1.933249
2018-04-03 -1.075167 -0.522921 2.593055 -0.690281
2018-04-04 0.563410 0.733652 0.526327 0.853833
>>> df.sort_index(axis=1,ascending=False)   #.sort_index索引排序
D C B A
2018-03-30 1.130341 -0.192504 0.632289 -0.739980
2018-03-31 0.693547 0.143446 0.267729 -1.622673
2018-04-01 1.330529 -0.225253 -1.020264 -1.086053
2018-04-02 1.933249 -0.604576 -1.153898 0.751340
2018-04-03 -0.690281 2.593055 -0.522921 -1.075167
2018-04-04 0.853833 0.526327 0.733652 0.563410
>>> df.sort_index(axis=1,ascending=True)
A B C D
2018-03-30 -0.739980 0.632289 -0.192504 1.130341
2018-03-31 -1.622673 0.267729 0.143446 0.693547
2018-04-01 -1.086053 -1.020264 -0.225253 1.330529
2018-04-02 0.751340 -1.153898 -0.604576 1.933249
2018-04-03 -1.075167 -0.522921 2.593055 -0.690281
2018-04-04 0.563410 0.733652 0.526327 0.853833
>>> df.sort_index(axis=0,ascending=False)
A B C D
2018-04-04 0.563410 0.733652 0.526327 0.853833
2018-04-03 -1.075167 -0.522921 2.593055 -0.690281
2018-04-02 0.751340 -1.153898 -0.604576 1.933249
2018-04-01 -1.086053 -1.020264 -0.225253 1.330529
2018-03-31 -1.622673 0.267729 0.143446 0.693547
2018-03-30 -0.739980 0.632289 -0.192504 1.130341
>>> df.sort_values(by='A') #对A列进行排序
A B C D
2018-03-31 -1.622673 0.267729 0.143446 0.693547
2018-04-01 -1.086053 -1.020264 -0.225253 1.330529
2018-04-03 -1.075167 -0.522921 2.593055 -0.690281
2018-03-30 -0.739980 0.632289 -0.192504 1.130341
2018-04-04 0.563410 0.733652 0.526327 0.853833
2018-04-02 0.751340 -1.153898 -0.604576 1.933249

#选择 Selection

>>> df['A']   /df.A   #提取A列
2018-03-30 -0.739980
2018-03-31 -1.622673
2018-04-01 -1.086053
2018-04-02 0.751340
2018-04-03 -1.075167
2018-04-04 0.563410
Freq: D, Name: A, dtype: float64
>>> df[0:3] #提取0-2列
A B C D
2018-03-30 -0.739980 0.632289 -0.192504 1.130341
2018-03-31 -1.622673 0.267729 0.143446 0.693547
2018-04-01 -1.086053 -1.020264 -0.225253 1.330529 >>> df['2018-03-30':'2018-04-02'] #根据条件进行选取
A B C D
2018-03-30 -0.739980 0.632289 -0.192504 1.130341
2018-03-31 -1.622673 0.267729 0.143446 0.693547
2018-04-01 -1.086053 -1.020264 -0.225253 1.330529
2018-04-02 0.751340 -1.153898 -0.604576 1.933249 #根据标签进行选择
>>> df.loc[dates[0]] #提取第一行数据,将List作为索引,去除index
A -0.739980
B 0.632289
C -0.192504
D 1.130341
Name: 2018-03-30 00:00:00, dtype: float64
>>> df.loc[:,['A','B']] #提取A,B列数据
A B
2018-03-30 -0.739980 0.632289
2018-03-31 -1.622673 0.267729
2018-04-01 -1.086053 -1.020264
2018-04-02 0.751340 -1.153898
2018-04-03 -1.075167 -0.522921
2018-04-04 0.563410 0.733652 >>> df.loc['20180330':'20180402'] #=df['2018-03-30':'2018-04-02']
A B C D
2018-03-30 -0.739980 0.632289 -0.192504 1.130341
2018-03-31 -1.622673 0.267729 0.143446 0.693547
2018-04-01 -1.086053 -1.020264 -0.225253 1.330529
2018-04-02 0.751340 -1.153898 -0.604576 1.933249
>>> df.loc['20180330',['A','C']] #提取20180330行的A,C数据
A -0.739980
C -0.192504
Name: 2018-03-30 00:00:00, dtype: float64
>>> df.loc[dates[0],'A'] #提取第一行的A数据 ==.at
-0.73998009901277373
>>> df.at[dates[0],'A']
-0.73998009901277373 #根据位置获取 LOC通过标签'20180330','A'获取数据,iloc通过行号0-5,列号0-4进行获取
>>> df.iloc[3] #获取第四行数据
A 0.751340
B -1.153898
C -0.604576
D 1.933249
Name: 2018-04-02 00:00:00, dtype: float64
>>> df.iloc[3:5,0:2] #获取第4,5行,第1,2列数据
A B
2018-04-02 0.751340 -1.153898
2018-04-03 -1.075167 -0.522921
>>> df.iloc[[1,2,3],[0,2]]
A C
2018-03-31 -1.622673 0.143446
2018-04-01 -1.086053 -0.225253
2018-04-02 0.751340 -0.604576
>>> df.iloc[1:3,:]
A B C D
2018-03-31 -1.622673 0.267729 0.143446 0.693547
2018-04-01 -1.086053 -1.020264 -0.225253 1.330529
>>> df.iloc[:,1:3]
B C
2018-03-30 0.632289 -0.192504
2018-03-31 0.267729 0.143446
2018-04-01 -1.020264 -0.225253
2018-04-02 -1.153898 -0.604576
2018-04-03 -0.522921 2.593055
2018-04-04 0.733652 0.526327
>>> df.iloc[1,2] #快速获取一个值 ==.iat
0.14344580950869434
>>> df.iat[1,2]
0.14344580950869434

#布尔索引
利用一列的数据选择一部分数据

>>> df
A B C D
2018-03-30 -0.739980 0.632289 -0.192504 1.130341
2018-03-31 -1.622673 0.267729 0.143446 0.693547
2018-04-01 -1.086053 -1.020264 -0.225253 1.330529
2018-04-02 0.751340 -1.153898 -0.604576 1.933249
2018-04-03 -1.075167 -0.522921 2.593055 -0.690281
2018-04-04 0.563410 0.733652 0.526327 0.853833 >>> df[df.A>0] #获取df.A>0的行
A B C D
2018-04-02 0.75134 -1.153898 -0.604576 1.933249
2018-04-04 0.56341 0.733652 0.526327 0.853833
>>> df[df>0] #获取全部>0的值,小于0的数据使用NaN代替
A B C D
2018-03-30 NaN 0.632289 NaN 1.130341
2018-03-31 NaN 0.267729 0.143446 0.693547
2018-04-01 NaN NaN NaN 1.330529
2018-04-02 0.75134 NaN NaN 1.933249
2018-04-03 NaN NaN 2.593055 NaN
2018-04-04 0.56341 0.733652 0.526327 0.853833
>>> df3=df.copy()
>>> df3['E']= ['one','ine','two','three','four','tw1'] #添加新的列:==字典添加
>>> df3
A B C D E
2018-03-30 -0.739980 0.632289 -0.192504 1.130341 one
2018-03-31 -1.622673 0.267729 0.143446 0.693547 ine
2018-04-01 -1.086053 -1.020264 -0.225253 1.330529 two
2018-04-02 0.751340 -1.153898 -0.604576 1.933249 three
2018-04-03 -1.075167 -0.522921 2.593055 -0.690281 four
2018-04-04 0.563410 0.733652 0.526327 0.853833 tw1
'''
s1 = pd.Series([1,2,3,4,5,6],index=pd.date_range('20180330',periods=6))
'''
>>> df['F']=s1
>>> df
A B C D F
2018-03-30 -1.211269 -0.230951 0.043337 -0.009419 1
2018-03-31 0.777628 -1.073505 -0.020837 -1.536191 2
2018-04-01 -0.796874 0.683661 -0.674022 1.692808 3
2018-04-02 0.175397 -0.388439 0.282642 -0.896609 4
2018-04-03 -0.465964 -0.763797 -0.816209 0.062528 5
2018-04-04 0.967350 -1.416464 -0.547718 -0.034147 6 >>> s1
2013-03-30 1
2013-03-31 2
2013-04-01 3
2013-04-02 4
2013-04-03 5
2013-04-04 6
Freq: D, dtype: int64
>>> df['F']=s1 #插入的时候,需要使index保持一致
>>> df
A B C D F
2018-03-30 -0.031562 1.484402 1.793304 0.853730 NaN
2018-03-31 0.281454 0.121194 -0.141079 0.739159 NaN
2018-04-01 1.920370 0.637906 0.786430 0.344235 NaN
2018-04-02 1.558576 -1.547453 -2.212035 -0.853297 NaN
2018-04-03 1.603768 -0.273412 -1.106593 -0.597859 NaN
2018-04-04 -1.745511 1.979249 -0.015600 0.991435 NaN >>> df.at[dates[0],'A'] = 0 #at使用标签赋值
>>> df
A B C D F
2018-03-30 0.000000 -0.230951 0.043337 -0.009419 1
2018-03-31 0.777628 -1.073505 -0.020837 -1.536191 2
2018-04-01 -0.796874 0.683661 -0.674022 1.692808 3
2018-04-02 0.175397 -0.388439 0.282642 -0.896609 4
2018-04-03 -0.465964 -0.763797 -0.816209 0.062528 5
2018-04-04 0.967350 -1.416464 -0.547718 -0.034147 6
>>> df.iat[0,0] =1 #iat使用坐标进行赋值
>>> df
A B C D F
2018-03-30 1.000000 -0.230951 0.043337 -0.009419 1
2018-03-31 0.777628 -1.073505 -0.020837 -1.536191 2
2018-04-01 -0.796874 0.683661 -0.674022 1.692808 3
2018-04-02 0.175397 -0.388439 0.282642 -0.896609 4
2018-04-03 -0.465964 -0.763797 -0.816209 0.062528 5
2018-04-04 0.967350 -1.416464 -0.547718 -0.034147 6
>>> df.loc[:,'D']= np.array([5]*len(df)) #使用np进行赋值
>>> df
A B C D F
2018-03-30 1.000000 -0.230951 0.043337 5 1
2018-03-31 0.777628 -1.073505 -0.020837 5 2
2018-04-01 -0.796874 0.683661 -0.674022 5 3
2018-04-02 0.175397 -0.388439 0.282642 5 4
2018-04-03 -0.465964 -0.763797 -0.816209 5 5
2018-04-04 0.967350 -1.416464 -0.547718 5 6 >>> -df
A B C D F
2018-03-30 -1.000000 0.230951 -0.043337 -5.0 -1.0
2018-03-31 -0.777628 1.073505 0.020837 -5.0 -2.0
2018-04-01 0.796874 -0.683661 0.674022 -5.0 -3.0
2018-04-02 -0.175397 0.388439 -0.282642 -5.0 -4.0
2018-04-03 0.465964 0.763797 0.816209 -5.0 -5.0
2018-04-04 -0.967350 1.416464 0.547718 -5.0 -6.0
>>> df4 = df.copy()
>>> df4[df4>0] = -df4 #将df4数据全部变负值
>>> df4
A B C D F
2018-03-30 -1.000000 -0.230951 -0.043337 -5 -1
2018-03-31 -0.777628 -1.073505 -0.020837 -5 -2
2018-04-01 -0.796874 -0.683661 -0.674022 -5 -3
2018-04-02 -0.175397 -0.388439 -0.282642 -5 -4
2018-04-03 -0.465964 -0.763797 -0.816209 -5 -5
2018-04-04 -0.967350 -1.416464 -0.547718 -5 -6 '''
#df.to_csv('123.txt') #会自己创建文件,如果文件存在,则覆盖
#df.to_excel('345.xlsx')
print('写入成功')
df5 = pd.read_csv('123.txt')
df6 = pd.read_excel('345.xlsx')
print(df6)
 

python--Pandas(一)的更多相关文章

  1. python & pandas链接mysql数据库

    Python&pandas与mysql连接 1.python 与mysql 连接及操作,直接上代码,简单直接高效: import MySQLdb try: conn = MySQLdb.con ...

  2. Python pandas ERROR 2006 (HY000): MySQL server has gone away

    之前在做python pandas大数据分析的时候,在将分析后的数据存入mysql的时候报ERROR 2006 (HY000): MySQL server has gone away 原因分析:在对百 ...

  3. Python+Pandas 读取Oracle数据库

    Python+Pandas 读取Oracle数据库 import pandas as pd from sqlalchemy import create_engine import cx_Oracle ...

  4. 看到篇博文,用python pandas改写了下

    看到篇博文,https://blog.csdn.net/young2415/article/details/82795688 需求是需要统计部门礼品数量,自己简单绘制了个表格,如下: 大意是,每个部门 ...

  5. Python pandas快速入门

    Python pandas快速入门2017年03月14日 17:17:52 青盏 阅读数:14292 标签: python numpy 数据分析 更多 个人分类: machine learning 来 ...

  6. Python pandas & numpy 笔记

    记性不好,多记录些常用的东西,真·持续更新中::先列出一些常用的网址: 参考了的 莫烦python pandas DOC numpy DOC matplotlib 常用 习惯上我们如此导入: impo ...

  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. oracle数据据 Python+Pandas 获取Oracle数据库并加入DataFrame

    import pandas as pd import sys import imp imp.reload(sys) from sqlalchemy import create_engine impor ...

  9. Python Pandas找到缺失值的位置

    python pandas判断缺失值一般采用 isnull(),然而生成的却是所有数据的true/false矩阵,对于庞大的数据dataframe,很难一眼看出来哪个数据缺失,一共有多少个缺失数据,缺 ...

  10. 【跟着stackoverflow学Pandas】 - Adding new column to existing DataFrame in Python pandas - Pandas 添加列

    最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...

随机推荐

  1. accecc2010入门,语文

    accecc2010入门 数据库:存放数据并处理的仓库. access2010数据库(扩展名为accdb,改名时不能删扩展名): 1,功能区:代替了菜单栏和工具栏的功能,不用四处查找命令.在窗口下的顶 ...

  2. EF删除数据

    1.方法一,面向对象 using (MyDbContent content = new MyDbContent()) { content.Entry<UserInfo>(model).St ...

  3. 总结spring

    通过对spring的学习 什么是spring Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是 ...

  4. CSS Grid 布局学习笔记

    CSS Grid 布局学习笔记 好久没有写博客了, MDN 上关于 Grid 布局的知识比较零散, 正好根据我这几个月的实践对 CSS Grid 布局做一个总结, 以备查阅. 1. 基础用法 Grid ...

  5. webpack-webpackConfig-plugin 配置

    ProvidePlugin 语法: module.export = { plugins: [ new webpack.ProvidePlugin({ $: 'jquery', jQuery: 'jqu ...

  6. Java—数组和方法

    数组 声明数组 数组类型[] 数组名;or 数据类型 数组名[]; 如:int[] scores; 分配空间 数组名 = new 数据类型[数组长度];如:scores = new int[5]; 以 ...

  7. git 因线上分支名重复导致无法拉取代码

    有时 git pull 或 git fetch 时发现 git 报了个异常,说法像是无法将线上某个分支与本地分支合并,由于分支是...(很长的hash)但是分支却是...(很长的hash) 仔细查查后 ...

  8. Java类与对象初始化的过程(一道经典的面试题)

    本文不再以ClassLoader的视角解释这些问题. 首先,Java代码有个特点,就是成员变量可以在前面的方法中使用,在后面定义.这一特性,很多人说Java了不起,可是为什么呢?Java为何能够这样呢 ...

  9. 使用 Satis 搭建私有的 Composer 包仓库

    简述 iBrand 产品立项时是商业性质的项目,但是在搭建架构时考虑后续的通用性,因此每个模块都设计成一个 Package,作为公司内部用,因此这些包并不能提交到 packagist.org 上去. ...

  10. jQuery-prepend、append、before、after的区别

    举例说明,原始html代码如下: <ol> <li>List item 1</li> <li>List item 2</li> <li ...