快乐学习
前程无忧、中华英才非你莫属!

原创-Pandas心法之数据结构篇-1

一、前言

在最基本的层面上,Pandas对象可以看作是NumPy结构化数组的增强版本,

其中,行 (X轴)和列 (Y轴)使用标签而不是简单的整数索引进行标识。

我们先介绍这三个基本熊猫的数据结构:Series,DataFrame和Index。

Series:是带有显示索引数据的一维数组说明:它的索引可以不必是整数。是具有与值相关联的显式定义的索引。
有时只是操作Series ,比操作字典更有效。

DataFrame:是一个带有显示索引数据的二维数组。
实际上DataFrame是由多个Series 组成。 DataFrame 不仅有行索引,还有列索引。

Index:一个显式索引,可以修改,可逻辑操作的一维数组。


二、Series 数据结构

import pandas as pd

'''
# 1、Series 、
说明:Series是一维数组。可以从列表或数组中创建它
'''
data = pd.Series([0.25, 0.5, 0.75, 1.0])
print(data)

# 通过values、indexs属性访问它
print(data.values)
print(data.index)

# 通过索引访问它
print(data[1])

# 通过切片来访问它
print(data[1:3])

'''说明:Pandas 的Series 比Numpy的一维数组和列表更加具有灵活性'''

# 创建带有显示索引的Series

data = pd.Series([0.25, 0.5, 0.75, 1.0],
                 index=['a', 'b', 'c', 'd'])

print(data)
# 通过显示索引访问数据
print(data['a'])

# 也可以用非连续数字来作为索引
data = pd.Series([0.25, 0.5, 0.75, 1.0],
                 index=[2, 5, 3, 7])
print(data)
print(data[5])

# 把字典转化为Series。
population_dict = {'California': 38332521,
                   'Texas': 26448193,
                   'New York': 19651127,
                   'Florida': 19552860,
                   'Illinois': 12882135}
population = pd.Series(population_dict)
print(population)

# 可以用字典的方式,读取数据
print(population['California'])

# 与字典不同的它还支持切片
print(population['California':'Florida'])

# 创建series 对象
pd.Series(data, index=index)

# 例如,data可以是列表或NumPy数组,在这种情况下index默认为整数序列
print(pd.Series([2, 4, 6]))

# Series 也可以是个标量
print(pd.Series(5, index=[100, 200, 300]))

# data 也可以是个字典
print(pd.Series({2: 'a', 1: 'b', 3: 'c'}))

# 只显示和构建设置了显示索引的数据
print(pd.Series({2: 'a', 1: 'b', 3: 'c'}, index=[3, 2]))

三、DataFrame数据结构

"""
# 2、DataFrame
说明:带有显示索引的二维数组。由多个Series组成。
"""
import pandas as pd
import numpy as np

area_dict = {'California': 423967, 'Texas': 695662, 'New York': 141297,
             'Florida': 170312, 'Illinois': 149995}

population_dict = {'California': 38332521,
                   'Texas': 26448193,
                   'New York': 19651127,
                   'Florida': 19552860,
                   'Illinois': 12882135}
#
population = pd.Series(population_dict)
area = pd.Series(area_dict)

# 通过两个Series 创建一个DataFrame. 每个Series 是一列。
states = pd.DataFrame({'population': population,
                       'area': area})
print(states)
print(states['area'])  # 访问某列就是返回Series数据

# 通过index、columns、values 属性访问DataFrame 的数据
print(states.index)
print(states.columns)
print(states.values)

# 通过单列的Series 构造单列的DataFrame
print(pd.DataFrame(population, columns=['population']))

# 通过 list of dicts 来创建DateFrame
data = [{'a': i, 'b': 2 * i} for i in range(3)]
print(data)
print(pd.DataFrame(data))

# 通过dict of Lists 来创建DataFrame
test_dict = {'id': [1, 2, 3],
             'name': ['Alice', 'Bob', 'Cindy'],
             'math': [90, 89, 99],
             'english': [89, 94, 80]
             }

# [1].直接写入参数test_dict
test_dict_df = pd.DataFrame(test_dict, index=['a', 'b', 'c'])
print(test_dict_df)

# 即使字典中缺少某些键,也会用NaN来进行填充
print(pd.DataFrame([{'a': 1, 'b': 2}, {'b': 3, 'c': 4}]))

# 通过Numpy的二维数组,来创建DataFrame
print(pd.DataFrame(np.random.rand(3, 2),  # 3行,2列的Numpy二维数组
                   columns=['foo', 'bar'],  # 给每列起名字
                   index=['a', 'b', 'c']))  # 给每行加索引

# 通过Numpy结构化数据创建DataFrame
A = np.zeros(3, dtype=[('A', 'i8'), ('B', 'f8')])
print(pd.DataFrame(A))
打赏

未经允许不得转载:同乐学堂 » 原创-Pandas心法之数据结构篇-1

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

特别的技术,给特别的你!

联系QQ:1071235258QQ群:367203382
error: Sorry,暂时内容不可复制!