python--Pandas

Posted eilinge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python--Pandas相关的知识,希望对你有一定的参考价值。

一、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的主要内容,如果未能解决你的问题,请参考以下文章

Python:通过以更特定于 Pandas 的方式编写代码来简化代码

python pandas库上的示例代码。

python pandas怎么跳读sheet?

Python pandas.read_sql_query()常用操作方法代码

python3 + Pandas 样式 + 更改备用行颜色

Python pandas join 交叉连接(cross join)的使用及示例代码