python数据科学(六):pandas数据结构

Series

Series 是一维带标签的数组,数组里可以放任意的数据(整数,浮点数,字符串,Python Object)。

创建

创建时默认索引值为整型索引,可以自己创建索引

  • 直接创建
    s = pd.Series(np.random.randn(5))
    s = pd.Series(np.random.randn(5),index=[‘a’,‘b’,‘c’,‘d’,‘e’])
  • 字典创建
    key 转换为索引值
    s = pd.Series(字典, index=list(‘abcd’))
  • 标量创建
    s = pd.Series(标量,index=list(‘索引值’))

类比学习array dict

类似numpy中array,也类似是类字典对象
具体见代码

标签对齐

在进行加减法时,会自动寻找相同的标签进行加减,没有相同的标签会显示为NaN

代码

import pandas as pd
import numpy as np

s = pd.Series(np.random.randn(5))
print(s)

#类比学习
##类比array
print('类比array')
print(s[0])
print(s[:3])
print(s[[1, 3, 4]])
print(np.exp(s))
print(np.cos(s))

##类比dict
s = pd.Series(np.random.randn(5), index=['a', 'bab', 'cc', 'dd', 'ee'])
print('类比dict')
print(s['a'])

s['ee'] = 5
print(s)

s['g'] = 100
print(s)

#标签对齐
s1 = pd.Series(np.random.randn(3), index=['a', 'c', 'e'])
s2 = pd.Series(np.random.randn(3), index=['a', 'd', 'e'])
print('标签对齐')
print(s1 + s2)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

DataFrame

DataFrame是二维带行标签和列标签的数组。相当于一个 Excel 表格。

创建

df = pd.DataFrame(data, index=index, columns=columns)

其中 index 是行标签,columns 是列标签,data 可以是下面的数据

  • 由一维 numpy 数组,list,Series 构成的字典
  • 二维 numpy 数组
  • 一个 Series
  • 另外的 DataFrame 对象

pandas无法做行标签对齐操作

  • 字典创建
  • 结构化数据创建
  • 字典列表创建
  • 元组字典创建
  • 从Series创建

列的基本操作

普通操作
assign操作

索引和选择

对应的操作,语法和返回结果

  • 选择一列 -> df[col] -> Series
  • 根据行标签选择一行 -> df.loc[label] -> Series
  • 根据行位置选择一行 -> df.iloc[label] -> Series
  • 选择多行 -> df[5:10] -> DataFrame
  • 根据布尔向量选择多行 -> df[bool_vector] -> DataFrame

数据对齐

自动对齐

使用numpy函数

Pandas 与 numpy 在核心数据结构上是完全兼容的

代码

import pandas as pd
import numpy as np

##创建
#### 从字典创建
print('创建')
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
     'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

create=pd.DataFrame(d)
print('从字典创建')
print(create)

d = {'one' : [1, 2, 3, 4],
     'two' : [21, 22, 23, 24]}

create=pd.DataFrame(d, index=['a', 'b', 'c', 'd'])
print(create)

#### 从结构化数据中创建
data = [(1, 2.2, 'Hello'), (2, 3., "World")]
create=pd.DataFrame(data)
print('从结构化数据中创建')
print(create)

pd.DataFrame(data, index=['first', 'second'], columns=['A', 'B', 'C'])
create=pd.DataFrame(data)
print(create)

#### 从字典列表创建
data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
print('从字典列表创建')
create=pd.DataFrame(data)
print(create)

pd.DataFrame(data, index=['first', 'second'])
create=pd.DataFrame(data)
print(create)

#### 从元组字典创建
d = {('a', 'b'): {('A', 'B'): 1, ('A', 'C'): 2},
     ('a', 'a'): {('A', 'C'): 3, ('A', 'B'): 4},
     ('a', 'c'): {('A', 'B'): 5, ('A', 'C'): 6},
     ('b', 'a'): {('A', 'C'): 7, ('A', 'B'): 8},
     ('b', 'b'): {('A', 'D'): 9, ('A', 'B'): 10}}
create=pd.DataFrame(data)
print('从元组字典创建')
print(create)

#### 从 Series 创建
s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
create=pd.DataFrame(s)
print('从 Series 创建')
print(create)

create=pd.DataFrame(s, index=['a', 'c', 'd'], columns=['A'])
print(create)

## 列选择/增加/删除
df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three', 'four'])
print('普通列选择/增加/删除')
print(df['one'])

df['three'] = df['one'] + df['two']
print(df)

df['flag'] = df['one'] > 0
print(df)

four = df.pop('four')
print(df)

df['one_trunc'] = df['one'][:2]
print(df)

df.insert(1, 'bar', df['one'])
print(df)

#### 使用 assign() 方法来插入新列
df = pd.DataFrame(np.random.randint(1, 5, (6, 4)), columns=list('ABCD'))
print('使用 assign() 方法来插入新列')
print(df)
df.assign(Ratio = df['A'] / df['B'])
print(df)
df.assign(AB_Ratio = lambda x: x.A / x.B, CD_Ratio = lambda x: x.C - x.D)
print(df)

##数据对齐
df1 = pd.DataFrame(np.random.randn(10, 4), index=list('abcdefghij'), columns=['A', 'B', 'C', 'D'])
print('数据对齐')

df2 = pd.DataFrame(np.random.randn(7, 3), index=list('cdefghi'), columns=['A', 'B', 'C'])
print(df1 + df2)
print(df1 - df1.iloc[0])

##使用 numpy 函数
df = pd.DataFrame(np.random.randn(10, 4), columns=['one', 'two', 'three', 'four'])
print('使用 numpy 函数')
print(np.exp(df))
print(np.asarray(df) == df.values)
print(type(np.asarray(df)))

Panel

Panel 是三维带标签的数组。实际上,Pandas 的名称由来就是由 Panel 演进的,即 pan(el)-da(ta)-s。

  • items: 坐标轴 0,索引对应的元素是一个 DataFrame
  • major_axis: 坐标轴 1, DataFrame 里的行标签
  • minor_axis: 坐标轴 2, DataFrame 里的列标签

创建

函数

  • items:axis = 0
  • major_axis : axis = 1
  • minor_axis: axis = 2
  • major_xs:从Major_axis维访问数据
  • minor_xs:从Major_axis维访问数据

代码

import pandas as pd
import numpy as np


datapanel = {'Item1' : pd.DataFrame(np.random.randn(4, 3)),'Item2' : pd.DataFrame(np.random.randn(4, 2))}

pn = pd.Panel(datapanel)
print(pn)
print(pn['Item1'])


print(pn.items)
print(pn.major_axis)
print(pn.minor_axis)

# 函数
mx=pn.major_xs(pn.major_axis[0])
print(mx)

mnx=pn.minor_xs(pn.major_axis[1])
print(mnx)

pn.to_frame()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值