pandas笔记

来源:互联网 发布:linux删除文件夹 编辑:程序博客网 时间:2024/06/16 03:01

Pandas的数据类型

Pandas基于两种数据类型: series 与 dataframe 。

Series

一个series是一个一维的数据类型,其中每一个元素都有一个标签。类似于Numpy中元素带标签的数组。其中,标签可以是数字或者字符串。
import numpy as np
import pandas as pd
s = pd.Series([1, 2, 5, np.nan, 6, 8])
print s
 

DataFrame

一个dataframe是一个二维的表结构。Pandas的dataframe可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签。你可以把它想象成一个series的字典项。
 

创建日期索引序列

import pandas as pddates = pd.date_range('20170817', periods=7)

结果

    此时会产生一个日期序列 从2017-08-17开始,产生7个连续的日期

DatetimeIndex(['2017-08-17', '2017-08-18', '2017-08-19', '2017-08-20','2017-08-21', '2017-08-22', '2017-08-23'],              dtype='datetime64[ns]', freq='D')

创建Dataframe,其中 index 决定索引序列,columns 决定列名[传入列表]

import pandas as pdimport numpy as npdates = pd.date_range('20170817', periods=7)df = pd.DataFrame(np.random.randn(7,4), index=dates, columns=['A','B','C','D'])

结果

    此时会在Dataframe对象里插入7行每行4个随机数(7和4都是由index,columns的长度决定)

                   A         B         C         D2017-08-17 -1.056218  0.131798 -0.131886  1.1382592017-08-18  1.699503  2.494435  1.246487  0.7430472017-08-19 -0.803859  0.911608 -0.858777 -1.7903952017-08-20 -0.314994  0.848343 -0.563583  0.3377602017-08-21  2.139696 -1.633749  1.210869  0.9504252017-08-22  0.480713 -0.215890 -0.342616 -0.0151522017-08-23  0.063328 -1.522219 -0.132829  1.352349
 

选择/切片

选择单独的一列,返回 Serires,与 df.A 效果相当。

df['A']

注意

  当要输出Dataframe对象的index时候们只能用

df.index

 

位置切片(行)

df[0:3]

 

  索引切片(整行 由index引出)

df['20170817':'20170819']

 

对多个轴同时通过标签进行选择(整列)

df.loc[:,['A','B']]

注意

  此处不能用

df.loc[:,['A':'B']]

 

获得某一个具体位置的数据(传入行 列坐标)

df.loc[dates[0],'A']
 
df.iloc[1,1]

 

通过位置进行选择(行)

df.iloc[3]

此时会选择 第4、5行的前两列的数据

df.iloc[3:5,0:2]
 
此时会选择第2 3 4行的 第1 3列数据
df.iloc[[1,2,3],[0,2]]
 

条件选择

布尔索引
df[df.A < 0]
获得大于零的项的数值
df[df > 0]

 

赋值(新增一列,索引需要和对应好 格式一致 否则会Nan)

s1 = pd.Series([1,2,3,4,5,6,7], index=pd.date_range('20170817', periods=7))df['F'] = s1

 

删除所有带有缺省项的行

df1.dropna()

 

给缺省项赋值

df1.fillna(value=100)
 

# 根据某一轴的索引进行排序

注意   ascending=True 升序  

df.sort_index(ascending=True)

 

根据某一列的数值进行排序

df.sort_values('B',ascending=True)
 

求平均值

df.mean()

 

指定轴上的平均值

df.mean(1)
 
 

合并

使用 concat() 连接 pandas 对象(包左不包右)

df = pd.DataFrame(np.random.randn(10, 4))pieces = [df[:2], df[3:4]] df2=pd.concat(pieces)

 

 

追加

在 dataframe 数据后追加行

df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])s = df.iloc[3]df2=df.append(s, ignore_index=True)
ignore_index=True 即:保持原来的index
 

分组

分组常常意味着可能包含以下的几种的操作中一个或多个
1.依据一些标准分离数据
2.对组单独地应用函数
3.将结果合并到一个数据结构中
 
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],'B': ['one', 'one', 'two', 'three','two', 'two', 'one', 'three'],'C': np.random.randn(8),'D': np.random.randn(8)})

 

# 对单个分组应用函数,数据被分成了 bar 组与 foo 组,分别计算总和。
df.groupby('A')['C'].sum() # 只显示Cdf.groupby('A').sum() # 显示所有

 

# 依据多个列分组会构成一个分级索引
df.groupby(['A', 'B']).sum()
 

文件存储

# 从 csv 文件读取数据pd.read_csv('A.csv') # 保存到 csv 文件df.to_csv('A.csv') # 读取 excel 文件pd.read_excel('A.xlsx', 'Sheet1', index_col=None, na_values=['NA']) # 保存到 excel 文件df.to_excel('A.xlsx', sheet_name='Sheet1')