calvin-zhang

一.Pandas简介

Pandas(Python Data Analysis Library)基于Numpy构建,让基于Numpy的应用更简单,被广泛应用于金融行业,流行的数据分析工具

二.Pandas安装

由于Pandas是python的第三方库,需要另外安装

pip3 install pandas

 

三.Pandas的数据结构

Pandas主要有两种数据结构:

  • 系列(Series)
  • 数据帧(DataFrame)

系列(Series)是能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组。轴标签统称为索引。

数据帧(DataFrame)是二维数据结构,即数据以行和列的表格方式排列。

数据帧(DataFrame)的功能特点:

  • 潜在的列是不同的类型
  • 大小可变
  • 标记轴(行和列)
  • 可以对行和列执行算术运算

 

四.各个数据结构示例

1.Series

  1)创建Series


import pandas as pd
obj=pd.Series([1,3,24,23,8])
print(obj)
print(obj.values)
print(obj.index)
print(obj[3])


2)自定义index

obj=pd.Series([1,3,8,24,23],index=[\'a\',\'b\',\'c\',\'d\',\'e\'])
print(obj)
print(obj.index)
print(obj[\'d\'])

也可以重新索引,如果某个索引值当前不存在,就引入缺失值,

   In [10]: obj2=obj.reindex([\'b\',\'c\',\'d\',\'f\',\'g\'])


   In [11]: obj2
   Out[11]:
   b 3.0
   c 8.0
   d 24.0
   f NaN
  g NaN
 dtype: float64

对于缺失值,可以填充其他值

In [12]: obj2=obj.reindex([\'b\',\'c\',\'d\',\'f\',\'g\'],fill_value=0)


In [13]: obj2
Out[13]:
b 3
c 8
d 24
f 0
g 0
dtype: int64

 

3)使用字典创建Series

dic={\'calvin\':7,\'kobe\':24,\'mj\':23,\'kd\':35}
print(pd.Series(dic))
 
2.DataFrame

data={\'name\':[\'calvin\',\'kobe\',\'michale\',\'durant\',\'james\'],\'age\':[29,40,56,30,34],\'height\':[1.70,1.98,1.98,2.06,2.03]} #从字典创建DataFrame
data2=[[\'a\',1],[\'b\',2],[\'c\',3]] #从列表创建DataFrame
data3 = {\'one\' : pd.Series([1, 2, 3], index=[\'a\', \'b\', \'c\']),
\'two\' : pd.Series([1, 2, 3, 4], index=[\'a\', \'b\', \'c\', \'d\'])} #从系列的字典来创建DataFrame
dd = pd.DataFrame(data3)
df=pd.DataFrame(data2,columns=[\'name\',\'age\']) #加入列标签
dd[\'three\']=pd.Series([10,20,30],index=[\'a\',\'b\',\'c\']) #增加列
del dd[\'one\'] #删除列
print(pd.DataFrame(data))
print(df)
print (dd)
print(dd[\'one\']) #列选择
print(dd.loc[\'b\']) #行选择(标签选择)
print(dd.iloc[1]) #行选择(按整数位置选择)
print(dd[0:2]) #行切片
下表列出了DataFrame构造函数所能接受的各种数据:

类型 说明
二维ndarray 数据矩阵,还可以传入行标和列标
由数组、列表或元组组成的字典 每个序列会变成DataFrame的一列。所有序列的长度必须相同
Numpy的结构化/记录数组 类似于“由数组组成的字典”
由Series组成的字典 每个Series会成为一列。如果没有显示指定索引,则各Series的索引会被合并成结果的行索引
由字典组成的字典 各内层字典会成为一列。键会被合并成结果的行索引,跟“由Series组成的字典”的情况一样
字典或Series的列表 各项将会成为DataFrame的一行。字典键或Series索引的并集将会成为DataFrame的列标
由列表或元组组成的列表 类似于“二维ndarray”
另一个DataFrame 该DataFrame的索引将会被沿用,除非显式指定了其他索引
Numpy的MaskedArray 类似于“二维ndarray”的情况,只是掩码值在结果DataFrame会变成NA/缺失值

五.读取Excel文件&CSV文件

新建一个测试用的Excel,命名为

google.xlsx

并加入一些数据,放入到pycharm工程目录下,数据如下图:

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data=pd.read_excel("google.xlsx")
print(data.head(3)) #读取前三行数据
print(data.tail(3)) #读取后三行数据
print(data.describe()) #数据概要统计

#使用日期做索引
dates=pd.to_datetime(data[\'Date\'])
df=data.set_index(dates)
df.drop(\'Date\',1,inplace=True)
df[\'Close\'].plot()
plt.show() #显示图片

loc——通过行标签索引行数据 
iloc——通过行号索引行数据 
#访问某列
print(df[\'Close\'])
#切片,获取指定的行
print(df[\'2018-08-08\':\'2018-08-18\'])
#索引切片
print(df.loc[\'2018-08-09\',[\'Open\',\'Close\']]) #两个维度切片
print(df.loc[\'2018-08-09\',\'Open\']) #查看2018-08-09这个日期的Open值
print(df.loc[\'2018-08-02\':\'2018-08-06\',\'Close\']) #查看2018-08-02到2018-08-06之间的Close值
print(df.loc[\'2018-08-04\':\'2018-08-08\',[\'Open\',\'Close\']]) #查看2018-08-02到2018-08-06之间的Open值和Close值
#位置切片
print(df.iloc[0,:]) #查看第一条数据
print(df.iloc[-5:,:])#获取倒数五条数据
print(df.iloc[-20:-10:4]) #步长为4,获取倒数20行到倒数10行的数据
print(df.iloc[0,0]) #获取第一条的第一个数据
print(df.at[dates[0],\'Close\']) #获取第一个日期的Close值
print(df[df[\'Open\']>60]) #筛选数据,获取Open值大于60的数据
df[\'Fake\']=pd.Series(np.random.randn(len(df)),index=dates) #增加一列数据
print(df)
df2=df.copy() #拷贝一个df2
df2[df2<0]=np.nan #小于0的全部设为NAN
print(df2)
print(df.mean()) #每一列的平均值
print(df.mean(1)) #每一行的平均值
print(df.groupby(by=df.index.year).mean()) #以年分组,求各年份的平均值
print(df.sort_values(by=\'Open\',ascending=False)) #默认升序排序,ascending=False设置降序排列

#批量迭代读取csv

data2=pd.read_csv(\'test.csv\',iterator=True,chunksize=10000,usecols=[\'date\'])
print(data2.get_chunk(4)) #获取前四行的数据
print(data2) #显示一串字符串 <pandas.io.parsers.TextFileReader object at 0x004CC490>
for i in data2: #迭代读取csv的数据
print(i)


 

分类:

技术点:

相关文章:

  • 2021-12-08
  • 2021-12-10
  • 2021-09-23
  • 2021-10-17
  • 2021-07-18
  • 2021-09-11
  • 2021-05-03
猜你喜欢
  • 2021-09-29
  • 2021-09-29
  • 2021-05-08
  • 2021-09-19
  • 2021-08-03
  • 2021-09-29
  • 2021-09-26
相关资源
相似解决方案