一、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. css内容整理1

    1.css引入的四种方式1.行内2.内嵌3.链接 <link href="1.css" rel="stylesheet">4.导入@import u ...

  2. Oracle 求昨天 上个月 去年 日期

    到公司发现有一个报表没有收到,查看后发现原来是Oracle数据源异常. ' day, 'yyyyMMdd') AS enddata FROM DUAL; 上面这个sql求上个月今天和昨天.一般情况下不 ...

  3. xmlDemo4j解析

    package lianxi; import java.util.Iterator;import java.util.List;import java.io.File;import java.io.F ...

  4. Hibernate课程 初探一对多映射5-2 Eclipse添加数据库连接

    1 Eclipse新建java项目 2 Windows ==> show view == >other ==>Data source Explorer 3 左侧视图 database ...

  5. python3线程介绍01(如何启动和调用线程)

    #!/usr/bin/env python# -*- coding:utf-8 -*- import osimport time,randomimport threading # 1-进程说明# 进程 ...

  6. Linux文件种类与扩展名

    一.文件种类 1)普通文件:ls -al第一个字符为[-]的 纯文本文件(ASCII) 二进制文件(binary):Linux中的可执行文件 数据格式文件(data):特定格式的文件,如:Linux登 ...

  7. hdu-1892 See you~---二维树状数组运用

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1892 题目大意: 题目大意:有很多方格,每个方格对应的坐标为(I,J),刚开始时每个格子里有1本书, ...

  8. 字符串查找算法的改进-hash查找算法

    字符串查找即为特征查找: 特征即位hash: 1.将待查找的字符串hash: 2.在容器字符串中找头字符匹配的字符串,并进行hash: 3.比较hash的结果:相同即位匹配: hash算法的设计为其中 ...

  9. 进程、内存的理想与现实 VS 虚拟内存

    理想情况下一个进程的运行,需要一块足够大的连续的内存进行装载. 现状: 1)内存不够大:分解进程内存空间. 2)内存不连续:内存映射.

  10. 离线安装vscode vsix插件

    VS代码扩展市场 通过扩展增强Visual Studio代码的强大功能 https://marketplace.visualstudio.com/vscode Visual Studio Code包含 ...