数据分析1 - 数据准备

数据类型

  • python 的定义、赋值与变量
  • 变量名的命名规则
  • 三种常用的数据类型:逻辑型、数值型、字符型

逻辑型:&, |, not

数值型的运算:+, -, *, /, %, // 取整除, **乘方

浮点数的精算:(使用 decimal 包中的 Decimal)

from decimal import Decimal
a = Decimal('4.2')
b = Decimal('2.1')
(a + b) == Decimal('6.3')

字符型:
使用 \ 转义特殊字符,还可作为续行符

字符串前面加上 r 可使字符串视为原始字符:r'C:\some\name'

使用 """..."""'''...''' 可跨越多行

数据结构——特定关系的集合

数据结构的学习方法:概念、定义、限制、访问、修改

pandas 包中的数据结构:Series(系列)DataFrame(数据框)

  • Series —— 存储一行或一列数据,没列名,有索引
from pandas import Series

# 定义,元素类型可混合,索引默认从0开始
x = Series(
            ['a', True, 1]
        )
# 定义,可为 Series 指定一个名字
x = Series(
            ['a', True, 1],
            name='test'
        )
# 定义,指定索引列
x = Series(
            ['a', True, 1],
            index = ['first', 'second', 'third']
        )
        
# 访问,通过索引访问元素
x[1]
x['first']

# 追加,不能追加单个元素,而是一个 Series 。append 方法并不直接修改,而是返回一个新的 Series
n = Series(['2'])
x = x.append(n)

# 判断 Series 是否包含元素
# 错误:'2' in x
# series.values 的类型是 numpy.ndarray ,表示一个 array
'2' in x.values

# 获取子 Series —— 切片
# 包左不包右
x[1:3]
# 从索引中获取切片
x[[0, 2, 1]]

# 删除
# 如果有指定索引,这里不能用默认的索引:0,1,2,3……来删除了
x.drop('first')
# 如果追加了两次元素,且没有指定索引,则两次索引均从0开始,即索引重复,此时会找不到对应 index 
x.drop(x.index[3])
# 返回元素值不为 '2' 的 Series,即剔除
x['2' != x.values]
  • DataFrame —— 存储多行或多列,有列名(字段名),有索引(从0开始),元素的位置是[3, 2](从1开始,三行二列)。DataFrame 可以被看做成 Series 的字典
from pandas import DataFrame

# 定义
df = DataFrame({
            'age': [21,22,23],
            'name':['ken', 'john', 'jay']
        })
df = DataFrame(
            data={
                'age': [21,22,23],
                'name':['ken', 'john', 'jay']
            },
            index=['first', 'second', 'third']
        )
   
# 访问
# 访问单列 —— 根据字段名,获取一个 Series
df['age']
# 访问多列 —— 根据字段名 list,获取一个 DataFrame
df[['age', 'name']]
# 访问行 —— 切片方式,获取一个 DataFrame
# 错误:df[1]
df[1:2]
# 访问单行 —— 索引方式,获取一个 Series
df.loc['first']
# 访问多行 —— 索引方式,获取一个 DataFrame
df.loc[['first', 'second']]
# 按行列号访问 —— 切片方式,获取一个 DataFrame,第一个切片指行,第二个切片指列
df.iloc[0:1, 0:2]
# 访问元素 —— 按行索引和列名
df.at['first', 'name']
# 行遍历
# df.iterrows() 是一个 generator 
# index 是 df 的索引的值
# row 是一个 Series,df 的列名变成 row 的索引
for index, row in df.iterrows():

# 修改列名
df.columns = ['age2', 'name2']
# 修改索引
df.index = range(1, 4)
# 使原来用于索引的字段重新变成字段,而加入的索引从0,1,2,... 开始
df.reset_index()

# 删除。axis=0 为行,1为列,默认为 axis=0
df.drop('first', axis=0)
df.drop('age', axis=1)

# 增加
# 增加行(这种方式效率低,不应用于遍历中)
df.loc[len(df)] = [24, "andy"]
# 增加列
df['newColumn'] = [2,4,6,8]


向量化运算

一种特殊的并行计算方式,可在同时执行多次操作,通常是对不同数据执行同样的一个或一批指令,或者说把指令应用于一个数组 / 向量中

生成等差数列:numpy.arange(start, end, step)

# py 原生只能生成整数,读取只能 for 循环
r1_10 = range(1,11,2)
for i in r1_10:
    print(i)

import numpy
# r 类型是 numpy.ndarray,即一个 array
r = numpy.arange(0.1, 0.5, 0.01)
  • 向量化运算的四则运算

规则:相同位置的数据进行运算,结果保留在相同位置

原则:1. 代码中尽量避免显式的 for 循环;2. 过早的优化是魔鬼

r+r
r-r
r*r
r/r

# 函数式的向量化计算
# r的5次方
numpy.power(r,5)

# 比较运算,返回 boolean 值的向量,大小与 r 相同
r > 0.3
# 比较运算 结合 过滤 使用,根据传入的 boolean 值的向量,保留值为 True 的对应的值重新组成向量
r[r>0.3]

# 矩阵运算
# 矩阵相乘
# r 和 r 的转置相乘
numpy.dot(r, r.T)
# 效果同下
sum(r*r)
  • DataFrame 的向量运算 —— 把 DataFrame 的一行或一列看成向量
# 定义
# numpy.random 用于生成随机数
# numpy.random.randn(5) 表示生成5个具有标准正态分布的值组成 array
# # numpy.random.randn(2,4) 表示生成结构为 array[array[4个元素], array[4个元素]]
df = DataFrame({
            'col1':numpy.random.randn(5),
            'col2':numpy.random.randn(5)
        })

# 获取最小值
# axis=0 按列获取,axis=1 按行获取。默认 axis=0
# 返回一个 Series,axis=0 时索引为df 的列名,axis=1 索引为 df 的索引
# min 为计算的函数,表示取最小值
df.apply(min)
df.apply(min, axis=0)
df.apply(min, axis=1)

# 判断每一行,值是否都大于0
# numpy.all(array) 判断传进来的向量是否值都为 True
df.apply(
            lambda x: numpy.all(x>0),
            axis=1
        )

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

推荐阅读更多精彩内容