Python数据分析——Pandas数据结构和操作

Pandas是什么?

1、一个强大的分析 结构化数据 的工具集

2、基础是NumPy,提供了 高性能矩阵 的运算

3、应用在数学挖掘,数据分析。比如,学生成绩分析,股票数据分析等

4、提供数据清洗功能

#使用

import pandas as pd

Pands数据结构,主要分为两种,Series和DataFrame

Series             视频资料学习分享  企(Q)鹅群    519970686

1、类似一维数组的对象

2、通过list构建Series

ser_obj = pd.Series(rang(10))

3、由数据和索引组成

索引在左,数据在右

索引是自动创建的

4、获取数据和索引

ser_obj.index

ser_obj.values

5、预览数据(取前几个)

ser_obj.head(n)

6、通过索引获取数据

ser_obj[1]

ser_obj[8]

7、索引与数据的对应关系仍保持在数组运算的结果中(过滤series中的数据)

print(ser_obj[ser_obj > 15])

8、通过dict构建Series

year_data = {2001: 17.8, 2002: 20.1, 2003: 16.5}

ser_obj2 = pd.Series(year_data)

print(ser_obj2.head())

print(ser_obj2.index)

ser_obj2.name = 'temp'

#指定name名称(相当于表头)

ser_obj2.index.name = 'year'

print(ser_obj2.head())

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

2001 17.8

2002 20.1

2003 16.5

dtype: float64

Int64Index([2001, 2002, 2003], dtype='int64')

year

2001 17.8

2002 20.1

2003 16.5

Name: temp, dtype: float64

DataFrame

1、类似多维数组/表格数据

2、每列数据可以是不同的类型

3、索引包括行索引和列索引

import numpy as np

# 通过ndarray构建DataFrame

array = np.random.randn(5,4)

print(array)

df_obj = pd.DataFrame(array)

print(df_obj)

# 通过dict构建DataFrame

dict_data = {'A': 1.,

'B': pd.Timestamp('20161217'),

'C': pd.Series(1, index=list(range(4)),dtype='float32'),

'D': np.array([3] * 4,dtype='int32'),

'E' : pd.Categorical(["Python","Java","C++","C#"]),

'F' : 'ChinaHadoop' }

#print dict_data

df_obj2 = pd.DataFrame(dict_data)

print(df_obj2.head())

# 通过列索引获取列数据(dataFrame优先通过列索引访问数据)

print(df_obj2['A'])

#通过索引访问数据

print(df_obj2.values[2])

#每列都是一个series

print(type(df_obj2['A']))

#通过对象属性访问

print(df_obj2.A)

# 增加列,类似dict添加key-value

df_obj2['G'] = df_obj2['D'] + 4

print(df_obj2.head())

# 删除列

del(df_obj2['G'] )

print(df_obj2.head())

Index 索引对象           视频资料学习分享  企(Q)鹅群    519970686

1、Series和DataFrame中的索引都是Index对象

2、Index具有不可变性(immutable),即Series和DataFrame中的value可以改变,但是索引不可变,保证了数据的安全

3、常见的Index种类

Index Int64Index MultiIndex(层级索引) DatatimeIndex(时间戳类型)

print(type(ser_obj.index))

print(type(df_obj2.index))

print(df_obj2.index)

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

Int64Index([0, 1, 2, 3], dtype='int64')

Series数据操作

import pandas as pd

#index,指定索引名称

ser_obj = pd.Series(range(5), index = ['a', 'b', 'c', 'd', 'e'])

print(ser_obj.head())

# 通过索引取值 ser_obj['label'],ser_obj[pos]

print(ser_obj['a']) //通过索引名取值

print(ser_obj[0]) //通过位置索引取值

# 切片索引

print(ser_obj[1:3]) // 前开后闭,即,取到两个值

print(ser_obj['b':'d']) //前闭后闭,即,取到三个值

# 不连续索引

print(ser_obj[[0, 2, 4]]) // 内部是list

print(ser_obj[['a', 'e']]) //内部是list

# 布尔索引

ser_bool = ser_obj > 2

print(ser_bool)

print(ser_obj[ser_bool])

print(ser_obj[ser_obj > 2])

DataFrame数据操作

import numpy as np

# colmns 指定列名

df_obj = pd.DataFrame(np.random.randn(5,4), columns = ['a', 'b', 'c', 'd'])

print(df_obj.head())

# 列索引

print('列索引')

print(df_obj['a']) # 返回Series类型

print(type(df_obj)) # 返回DataFrame类型

# 不连续索引

print('不连续索引')

print(df_obj[['a','c']]) # 返回第一列和第三列

索引操作总结

Pandas的索引操作可归纳为3种

.loc:标签索引(标签的切片索引是包含末尾位置的,上面的前闭后闭)

.iloc: 位置索引

.ix: 标签与位置混合索引

-------------先按标签索引尝试操作,然后再按照位置索引尝试操作

# 标签索引 loc

# Series

print(ser_obj['b':'d'])

print(ser_obj.loc['b':'d'])

# DataFrame

print(df_obj['a'])

print(df_obj.loc[0:2, 'a'])

# 整型位置索引 iloc

print(ser_obj[1:3])

print(ser_obj.iloc[1:3])

# DataFrame

第一个参数,表示的是第1行和第二行,第二个0表示的哪一列

print(df_obj.iloc[0:2, 0]) # 注意和df_obj.loc[0:2, 'a']的区别

运算与对齐

按索引对齐运算,没对齐的位置补NaN

s1 = pd.Series(range(10, 20), index = range(10))

s2 = pd.Series(range(20, 25), index = range(5))

# Series 对齐运算,Series按行索引对齐,没对齐的位置补NaN

print(s1 + s2)

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

0 30.0

1 32.0

2 34.0

3 36.0

4 38.0

5 NaN

6 NaN

7 NaN

8 NaN

9 NaN

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

import numpy as np

df1 = pd.DataFrame(np.ones((2,2)), columns = ['a', 'b'])

df2 = pd.DataFrame(np.ones((3,3)), columns = ['a', 'b', 'c'])

# DataFrame对齐操作

print(df1 + df2)

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

a b c

0 2.0 2.0 NaN

1 2.0 2.0 NaN

2 NaN NaN NaN

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

# 填充未对齐的数据进行运算

#使用add,sub,div,mul;同时通过fill_value指定填充值

s1.add(s2, fill_value = 1)

df1.sub(df2, fill_value = 2.)

# 填充NaN

s3 = s1 + s2

s3_filled = s3.fillna(-1)//把所有的NaN使用-1填充

df3 = df1 + df2

df3.fillna(100, inplace = True)//把所有的NaN使用100填充

函数应用

# Numpy ufunc 函数

df = pd.DataFrame(np.random.randn(5,4) - 1)

#求绝对值,作用于df中每个数据

print(np.abs(df))

# 使用apply应用行或列数据

#如果没有指定axis方向,默认按列,axis =0

print(df.apply(lambda x : x.max()))

# 指定轴方向

print(df.apply(lambda x : x.max(), axis=1))

# 使用applymap应用到每个数据

f2 = lambda x : '%.2f' % x

print(df.applymap(f2))

排序

s4 = pd.Series(range(10, 15), index = np.random.randint(5, size=5))

# 索引排序

s4.sort_index()

df4 = pd.DataFrame(np.random.randn(3, 4),

index=np.random.randint(3, size=3),

columns=np.random.randint(4, size=4))

df4.sort_index(axis=1)

# 按值排序 sort_values(by='label')

df4.sort_values(by=1)

处理缺失数据            视频资料学习分享  企(Q)鹅群    519970686

import numpy as np

df_data = pd.DataFrame([np.random.randn(3), [1., np.nan, np.nan],

[4., np.nan, np.nan], [1., np.nan, 2.]])

df_data.head()

# isnull

df_data.isnull()

# dropna 丢弃缺失数据

df_data.dropna()

#df_data.dropna(axis=1)

# fillna 填充缺失数据

df_data.fillna(-100.)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容