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

潜在的列是不同的类型

大小可变

标记轴(行和列)

可以对行和列执行算术运算

四.各个数据结构示例

1.Series

1)创建Series

# coding:utf-8

import pandas as pd

obj = pd.Series([1, 3, 24, 23, 8])

print(obj)

print("--"*10)

print(obj.values)

print("--"*10)

print(obj.index)

print("--"*10)

print(obj[3])

0 1

1 3

2 24

3 23

4 8dtype: int64--------------------[1 3 24 23 8]--------------------RangeIndex(start=0, stop=5, step=1)--------------------

23

2)自定义index,定义索引后,原有位置索引依然可以使用

obj = pd.Series([1, 3, 24, 23, 8],index=list("abcde"))

print(obj)

print("--"*10)

print(obj.values)

print("--"*10)

print(obj.index)

print("--"*10)

print(obj[3],obj["d"])

a 1b3c24d23e8dtype: int64--------------------[1 3 24 23 8]--------------------Index(['a', 'b', 'c', 'd', 'e'], dtype='object')--------------------

23 23

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

obj = pd.Series([1, 3, 24, 23, 8],index=list("abcde"))

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

print(obj2)

print("--"*10)

print("obj:{}".format(obj.values))

print("obj2:{}".format(obj2.values))

print("--"*10)

print(obj2.index)

print("--"*10)

print(obj2[3],obj2["d"])

b 3.0c24.0d23.0f NaN

g NaN

dtype: float64--------------------obj:[1 3 24 23 8]

obj2:[3. 24. 23. nan nan]--------------------Index(['b', 'c', 'd', 'f', 'g'], dtype='object')--------------------nan23.0

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

obj = pd.Series([1, 3, 24, 23, 8],index=list("abcde"))

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

print(obj2)

print("--"*10)

print("obj:{}".format(obj.values))

print("obj2:{}".format(obj2.values))

print("--"*10)

print(obj2.index)

print("--"*10)

print(obj2[3],obj2["d"])

b 3c24d23f0g0dtype: int64--------------------obj:[1 3 24 23 8]

obj2:[3 24 23 0 0]--------------------Index(['b', 'c', 'd', 'f', 'g'], dtype='object')--------------------

0 23

3)使用字典创建Series,字典key会作为series的索引

dic={'calvin':7,'kobe':24,'mj':23,'kd':35}

print(pd.Series(dic))

#####

calvin7kd35kobe24mj23dtype: int64

2.DataFrame

在所有操作之前当然要先import必要的pandas库,因为pandas常与numpy一起配合使用,所以也一起import吧。对于numpy这个包后面再来写,先导入,看代码,开始这次的重点

1)直接创建,可以直接使用pandas的DataFrame函数创建,比如接下来我们随机创建一个4*4的DataFrame。上面提到过,DataFrame是二维数据结构

# coding:utf-8import pandasaspd

import numpyasnp

df1=pd.DataFrame(np.random.randn(4,4),index=list('ABCD'),columns=list('ABCD'))

print("=="*50)

print(df1)

print("=="*50)

print(df1.ndim)

print("=="*50)

print(df1.size)

print("=="*50)

print(df1.shape)

结果:

====================================================================================================A B C D

A-0.077428 1.117524 0.595675 -0.247774B0.734320 2.117861 1.531927 -0.485774C1.126023 -0.640626 0.755659 -0.651486D-0.008357 -0.582401 -0.908435 0.225568

====================================================================================================

2 #ndim查看DataFrame的"轴",轴为2,即为2维

====================================================================================================

16 #size查看DataFrame的数据量,16个数据

====================================================================================================(4, 4) #shape查看DataFrame的类型,即4行4列

其中第一个参数是存放在DataFrame里的数据,第二个参数index就是之前说的行名(或者应该叫索引?),第三个参数columns是之前说的列名。

后两个参数可以使用list输入,但是注意,这个list的长度要和DataFrame的大小匹配,不然会报错。当然,这两个参数是可选的,你可以选择不设置。

而且发现,这两个list是可以一样的,但是每行每列的名字在index或columns里要是唯一的。

2)使用字典创建,

dic1 ={'name': ['小明', '小红', '狗蛋', '铁柱'],'age': [17, 20, 5, 40],'gender': ['男', '女', '女', '男']

}

df3=pd.DataFrame(dic1,)

print(df3)

####

age gender name0 17男 小明1 20女 小红2 5女 狗蛋3 40 男 铁柱

3.DataFrame查看与筛选数据

3.1 查看列的数据类型,dtypes

df3 =pd.DataFrame(dic1,)

print(df3.dtypes)

##########

age int64

genderobjectnameobjectdtype:object

3.2 查看DataFrame的头尾head(),tail()默认都是5行

df4=pd.DataFrame(np.random.randn(6,6))

print(df4.head())

print("--"*50)

print(df4.tail(2))

#######0 1 2 3 4 5

0 1.343776 -1.279881 -1.181201 -0.396298 -1.125743 -0.611221

1 0.948905 -0.345690 -1.790776 1.020443 -1.254210 -2.217274

2 -0.528329 -0.972449 -0.851321 0.260332 -0.189709 -1.215085

3 -0.520668 1.463702 1.161444 0.734592 -0.766386 0.911954

4 -0.091497 2.277969 -0.596919 1.223075 0.701117 1.179839

----------------------------------------------------------------------------------------------------

0 1 2 3 4 5

4 -0.091497 2.277969 -0.596919 1.223075 0.701117 1.179839

5 1.274698 0.056263 -0.244694 0.841284 -0.596790 -1.340147

3.3 查看DataFrame的行名与列名df1.index、df3.columns

df1 = pd.DataFrame(np.random.randn(4, 4), index=list('abcd'), columns=list('ABCD'))

print(df1)

print("--"*50)

print(df1.index)

print(df1.columns)

######

A B C D

a0.554493 0.952188 1.506555 -0.618873b0.255190 0.357644 0.002479 -0.307104c-0.283515 0.220664 -0.458655 0.830601d-0.608960 -0.301327 0.400476 0.118921

----------------------------------------------------------------------------------------------------Index(['a', 'b', 'c', 'd'], dtype='object')

Index(['A', 'B', 'C', 'D'], dtype='object')

3.4 查看DataFrame的值, values。返回的是一个数组。

dic1 ={'name': ['小明', '小红', '狗蛋', '铁柱'],'age': [17, 20, 5, 40],'gender': ['男', '女', '女', '男']

}

df3=pd.DataFrame(dic1,)

print(df3)

print("--"*50)

print(df3.values)

#####

age gender name0 17男 小明1 20女 小红2 5女 狗蛋3 40男 铁柱----------------------------------------------------------------------------------------------------[[17 '男' '小明']

[20 '女' '小红']

[5 '女' '狗蛋']

[40 '男' '铁柱']]

查看某一列的数据

dic1 ={'name': ['小明', '小红', '狗蛋', '铁柱'],'age': [17, 20, 5, 40],'gender': ['男', '女', '女', '男']

}

df3=pd.DataFrame(dic1,)

print(df3)

print("--"*30)

print(df3["name"])

print("--"*30)

print(df3["name"].values)

######

age gender name0 17男 小明1 20女 小红2 5女 狗蛋3 40男 铁柱------------------------------------------------------------

0小明1小红2狗蛋3铁柱

Name: name, dtype:object

------------------------------------------------------------['小明' '小红' '狗蛋' '铁柱']

使用loc或者iloc查看数据值(但是好像只能根据行来查看?)。区别是loc是根据行名,iloc是根据数字索引(也就是行号)。

df1 = pd.DataFrame(np.random.randn(4, 4), index=list('abcd'), columns=list('ABCD'))

print(df1.loc["a"])-------A-0.224071B0.183044C0.769312D0.700409Name: a, dtype: float64

或者这样。

df1 = pd.DataFrame(np.random.randn(4, 4), index=list('abcd'), columns=list('ABCD'))

print(df1.iloc[0])------A-0.193388B-0.552667C0.368871D-1.143332Name: a, dtype: float64

3.5 查看行列数,shape查看行列数,参数为0表示查看行数,参数为1表示查看列数。

dic1 ={'name': ['小明', '小红', '狗蛋', '铁柱'],'age': [17, 20, 5, 40],'gender': ['男', '女', '女', '男']

}

df3=pd.DataFrame(dic1, )

print(df3)

print("--" * 50)

print("行数:{},列数:{}".format(df3.shape[0], df3.shape[1]))

print("类型:%s * %s" %df3.shape)

######

age gender name0 17男 小明1 20女 小红2 5女 狗蛋3 40男 铁柱----------------------------------------------------------------------------------------------------行数:4,列数:3类型:4 * 3

3.5 小结。

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']) #增加列

print(pd.DataFrame(data))##

age height name

029 1.70calvin1 40 1.98kobe2 56 1.98michale3 30 2.06durant4 34 2.03 james

print(df)###

name age

0 a1

1 b 2

2 c 3

print(dd)###

one two three

a1.0 1 10.0b2.0 2 20.0c3.0 3 30.0d NaN4 NaN

print(dd['one']) #列选择

###

****************************************a1.0b2.0c3.0d NaN

Name: one, dtype: float64****************************************

print(dd.loc['b']) #行选择(标签选择)

****************************************one2.0two2.0three20.0Name: b, dtype: float64****************************************

print(dd.iloc[1]) #行选择(按整数位置选择)

****************************************one2.0two2.0three20.0Name: b, dtype: float64****************************************

print(dd[0:2]) #行切片

****************************************one two three

a1.0 1 10.0b2.0 2 20.0

****************************************

下表列出了DataFrame构造函数所能接受的各种数据:

类型

说明

二维ndarray

数据矩阵,还可以传入行标和列标

由数组、列表或元组组成的字典

每个序列会变成DataFrame的一列。所有序列的长度必须相同

Numpy的结构化/记录数组

类似于“由数组组成的字典”

由Series组成的字典

每个Series会成为一列。如果没有显示指定索引,则各Series的索引会被合并成结果的行索引

由字典组成的字典

各内层字典会成为一列。键会被合并成结果的行索引,跟“由Series组成的字典”的情况一样

字典或Series的列表

各项将会成为DataFrame的一行。字典键或Series索引的并集将会成为DataFrame的列标

由列表或元组组成的列表

类似于“二维ndarray”

另一个DataFrame

该DataFrame的索引将会被沿用,除非显式指定了其他索引

Numpy的MaskedArray

类似于“二维ndarray”的情况,只是掩码值在结果DataFrame会变成NA/缺失值

五.读取Excel文件&CSV文件

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

test.xlsx

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

importpandas as pd

data=pd.read_excel("test.xlsx")print(data.head(3)) #读取前三行数据

========================================Date Open Hight Low Close Adj Close Volume

02019-10-09 50.123456 75.123456 20.123456 33.123456 43.123456 45.123456

1 2019-10-10 51.123456 76.123456 21.123456 34.123456 44.123456 46.123456

2 2019-10-11 52.123456 77.123456 22.123456 35.123456 45.123456 47.123456

========================================

print(data.tail(3)) #读取后三行数据

========================================Date Open Hight ... Close Adj Close Volume23 2019-11-01 73.123456 98.123456 ... 56.123456 66.123456 68.123456

24 2019-11-02 74.123456 99.123456 ... 57.123456 67.123456 69.123456

25 2019-11-03 75.123456 100.123456 ... 58.123456 68.123456 70.123456[3 rows x 7columns]========================================

print(data.describe()) #数据概要统计

========================================Open Hight Low Close Adj Close Volume

count26.000000 26.000000 26.000000 26.000000 26.000000 26.000000mean62.623456 87.623456 32.623456 45.623456 55.623456 57.623456std7.648529 7.648529 7.648529 7.648529 7.648529 7.648529min50.123456 75.123456 20.123456 33.123456 43.123456 45.123456

25% 56.373456 81.373456 26.373456 39.373456 49.373456 51.373456

50% 62.623456 87.623456 32.623456 45.623456 55.623456 57.623456

75% 68.873456 93.873456 38.873456 51.873456 61.873456 63.873456max75.123456 100.123456 45.123456 58.123456 68.123456 70.123456

========================================

importpandas as pdimportmatplotlib.pyplot as plt

data=pd.read_excel("test.xlsx")#使用日期做索引

dates=pd.to_datetime(data['Date'])

df=data.set_index(dates)

df.drop('Date',1,inplace=True)

df['Open'].plot()

plt.show()#显示图片

#访问某列

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) #显示一串字符串

for i in data2: #迭代读取csv的数据

print(i)

python34 pandas_python 3 科学计算之pandas入门(一)相关推荐

  1. python3 科学计算_python3 科学计算之pandas入门(三)

    一.函数应用和映射 Numpy的ufuncs(元素级数组方法)也可以用于操作pandas对象: In [48]: frame=DataFrame(np.random.randn(4,3),column ...

  2. python3 科学计算_python3 科学计算之pandas入门(一)

    数据帧(DataFrame)的功能特点: 潜在的列是不同的类型 大小可变 标记轴(行和列) 可以对行和列执行算术运算 四.各个数据结构示例 1.Series 1)创建Series import pan ...

  3. Python科学计算之Pandas基础学习

    Python科学计算之Pandas基础学习 导入Pandas 我们首先要导入我们的演出明星--Pandas. 这是导入Pandas的标准方式.显然,我们不希望每时每刻都在程序中写'pandas',但是 ...

  4. 科学计算库——Pandas随笔【附网络隐私闲谈】

    文章目录 8.2.pandas 8.2.1.为什么用 pandas ? 8.2.2.pandas Series 类型 8.2.3.pandas 自定义索引 8.2.4.pandas 如何判断数据缺失? ...

  5. python数据科学系列:pandas入门详细教程

    导读 前2篇分别系统性介绍了numpy和matplotlib的入门基本知识,今天本文自然是要对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀&q ...

  6. 使用Python进行科学计算:NumPy入门

    原创2016-08-07Jamal Moir编程派 编程派微信号:codingpy 本文由 Python 翻译组 最新翻译出品,原作者为 Jamal Moir,译者为 cystone,并由编程派作者  ...

  7. 【A-003】python数据分析与机器学习实战 Python科学计算库 Pandas数据分析处理库(二)

    目录: 处理缺失数据制作透视图删除含空数据的行和列多行索引使用apply函数 本节要处理的数据来自于泰坦尼克号的生存者名单,它的数据如下: PassengerId Survived Pclass .. ...

  8. Python科学计算:Pandas

    Pandas 提供的基础数据结构 DataFrame 与 json 的契合度很高,转换起来就很方便.如果说,在 NumPy 中数据结构是围绕 ndarray 展开的,那么在 Pandas 中就有Ser ...

  9. 科学计算库Pandas的使用(附思维导图)

    pandas Pandas介绍 2008年WesMcKinney开发出的库: 专门用于数据挖掘的开源python库: 以Numpy为基础,借力Numpy模块在计算方面性能高的优势: 基于matplot ...

最新文章

  1. 用like语句时的C#格式化函数
  2. UART接口与COM口的区别
  3. Codeforces-868C. Qualification Rounds(状压)
  4. 数字化转型里面的这些名词都是什么关系呢?
  5. OpenCASCADE:OCCT应用框架OCAF之函数机制使用示例
  6. CDH 5.13.0 集成 Phoenix
  7. python下载邮件附件_Python - 从电子邮件附件下载excel文件然后解析它
  8. 【Vue】五个最常用的事件修饰符
  9. 微博转发的内容如何实现点击人名跳转到个人主页
  10. JAVA redis 常用函数
  11. 怎么创建c语言数组的格式,c – 如何创建类类型数组?
  12. 程序员如何避免半途而废?
  13. python cnn模型_CNN系列模型发展简述(附github代码——已全部跑通)
  14. 爪哇国新游记之二十----将数字转换成中国汉字大写形式
  15. django 用auth的login后重定向
  16. 管道|符与xargs命令
  17. java认证考试 难度_Java认证考试技巧心得是什么?
  18. 程序员的故事 007 程序员是吃青春饭的
  19. python中not是什么意思_python中的not具体使用及意思
  20. 抖音上热门的方法和技巧

热门文章

  1. 国内的知名产品及其开发语言v0.0.1
  2. LabVIEW编程LabVIEW开发视频教学例程与相关资料
  3. 蓝桥杯试题 基础练习 矩形面积交 BASIC-18 JAVA
  4. 你应该知道的 89 个操作系统核心概念
  5. 计算机win7如何连接wifi网络,win7怎么连wifi,win7电脑连不上网
  6. 拼多多店铺流量解析:这些流量入口你必须了解!
  7. Linux内核源码阅读以及工具(转)
  8. Android http请求 工具类
  9. [20190718]12c rman新特性 表恢复.txt
  10. 精心整理的ebay大数据面试题(全)