一、前言
在最基本的层面上,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))