pandas基础(核心数据结构)

本文介绍了Pandas的核心数据结构,包括Series、DataFrame和Panel。Series是一维带标签的数组,可从ndarray、字典、标量创建,具备类ndarray和类字典特性。DataFrame是二维表格数据结构,支持从多种数据源创建,并提供了列选择、增加和删除等操作。Panel则为三维带标签的数组,较少用但重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pandas核心数据结构

Series

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

s = pd.Series(data, index=index)

其中 index 是一个列表,用来作为数据的标签;
data 可以是不同的数据类型:

  • Python 字典
  • ndarray 对象
  • 一个标量值,如 5

从ndarray创建

s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
s

运行结果为:
a    0.747292
b   -1.120276
c   -0.132692
d   -0.267813
e   -0.590904

从字典创建

# 空值的默认处理
d = {'a' : 0., 'b' : 1., 'd' : 3}
s = pd.Series(d, index=list('abcd'))
s

运行结果为:
a     0
b     1
c   NaN
d     3

从标量创建

pd.Series(3, index=list('abcde'))

运行结果为:
a    3
b    3
c    3
d    3
e    3

Series 是类 ndarray 对象

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

可做如下操作:
s[0]
s[:3]
s[[1, 3, 4]]
np.exp(s)
np.sin(s)

Series 是类字典对象

s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])

可做如下操作:
s['a']
s['e'] = 5
s['g'] = 100
'e' in s
print s.get('f')
print s.get('f', np.nan)    # 得到的空值返回为NaN

属性:标签对齐

s1 = pd.Series(np.random.randn(3), index=['a', 'c', 'e'])
s2 = pd.Series(np.random.randn(3), index=['a', 'd', 'e'])
print '{0}\n\n{1}'.format(s1, s2)

s1 + s2

运行结果为:
a   -0.917905
c   -0.744616
e    0.114522

a    0.721087
d   -0.471575
e    0.796093

a   -0.196818
c         NaN
d         NaN
e    0.910615

属性:name

s = pd.Series(np.random.randn(5), name='Some Thing')
s.name

运行结果为:
'Some Thing'

DataFrame

DataFrame 是二维带行标签和列标签的数组。可以把 DataFrame 想象成一个 Excel 表格或一个 SQL 数据库的表格,还可以想象成是一个 Series 对象字典。它是 Pandas 里最常用的数据结构

创建 DataFrame 的基本格式是:

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

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

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

从字典创建

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
     'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
     
pd.DataFrame(d)

在这里插入图片描述

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

在这里插入图片描述

pd.DataFrame(d, index=['d', 'b', 'a'], columns=['two', 'three'])

在这里插入图片描述

d = {'one' : [1, 2, 3, 4],
     'two' : [21, 22, 23, 24]}
pd.DataFrame(d)

在这里插入图片描述

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

在这里插入图片描述

从结构化数据创建

data = [(1, 2.2, 'Hello'), (2, 3., "World")]
pd.DataFrame(data)

在这里插入图片描述

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

在这里插入图片描述

从字典列表创建

data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
pd.DataFrame(data)

在这里插入图片描述

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

在这里插入图片描述

pd.DataFrame(data, columns=['a', 'b'])

在这里插入图片描述

从字典列表创建

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}}

在这里插入图片描述

从Series创建

s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
pd.DataFrame(s)

在这里插入图片描述

pd.DataFrame(s, index=['a', 'c', 'd'])

在这里插入图片描述

列的选择、增加、删除

df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three', 'four'])
df

在这里插入图片描述

# 选择一列
df['one']

在这里插入图片描述

# 改变某一列的值
df['three'] = df['one'] + df['two']
df

在这里插入图片描述

# 添加新列
df['flag'] = df['one'] > 0
df

在这里插入图片描述

# 删除某列
del df['three']
df

在这里插入图片描述

# 弹出某列
four = df.pop('four')
four

在这里插入图片描述

# 添加一列 ,内容为固定标量
df['five'] = 5
df

在这里插入图片描述

# 添加一列,内容可截取其他列的一部分
df['one_trunc'] = df['one'][:2]
df

在这里插入图片描述

# 指定位置插入一列
df.insert(1, 'bar', df['one'])
df

在这里插入图片描述

用assign()方法插入新列(不改变原DataFrame)

df = pd.DataFrame(np.random.randint(1, 5, (6, 4)), columns=list('ABCD'))
df

在这里插入图片描述

# 创建一个新列
df.assign(Ratio = df['A'] / df['B'])

在这里插入图片描述

# 使用lamdba来定义函数
# 一次性创建多个新列
df.assign(AB_Ratio = lambda x: x.A / x.B, CD_Ratio = lambda x: x.C - x.D)

在这里插入图片描述

# 使用lambda来定义函数
# 连续使用assign()方法来创建多个新列
df.assign(AB_Ratio = lambda x: x.A / x.B).assign(ABD_Ratio = lambda x: x.AB_Ratio * x.D)

在这里插入图片描述

索引和选择

  • 选择一列 -> df[col] -> Series
  • 根据行标签选择一行 -> df.loc[label] -> Series
  • 根据行位置选择一行 -> df.iloc[label] -> Series
  • 选择多行 -> df[5:10] -> DataFrame
  • 根据布尔向量选择多行 -> df[bool_vector] -> DataFrame
df = pd.DataFrame(np.random.randint(1, 10, (6, 4)), index=list('abcdef'), columns=list('ABCD'))
df

在这里插入图片描述

df['A']

在这里插入图片描述

df.loc['a']

在这里插入图片描述

# iloc对应的是第几行,而不是标签
df.iloc[0]

在这里插入图片描述

df[1:4]

在这里插入图片描述

df[[False, True, True, False, True, False]]

在这里插入图片描述

属性:数据对齐

属性:使用nump函数

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

Panel

Panel 是三维带标签的数组。Panel 比较少用,但依然是最重要的基础数据结构之一。

  • items: 坐标轴 0,索引对应的元素是一个DataFrame
  • major_axis: 坐标轴 1, DataFrame里的行标签
  • minor_axis: 坐标轴 2, DataFrame里的列标签
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)),
        'Item2' : pd.DataFrame(np.random.randn(4, 2))}
pn = pd.Panel(data)
pn

运算结果为:
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 3 (minor_axis)
Items axis: Item1 to Item2
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 2
# 可以进行函数调用
pn.major_xs(pn.major_axis[0])

在这里插入图片描述

# 可以进行函数调用
pn.minor_xs(pn.major_axis[1])

在这里插入图片描述

# 转化为DataFrame
pn.to_frame()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值