import pandas as pd
import numpy as np
# 定义一个简单的数据集,np.nan为缺失项
data = pd.DataFrame({
'name': ['John', 'Xiaomi', 'Zhangsan', 'Lisi'],
'age': [28, np.nan, 35, 22],
'gender': ['M', 'F', 'M', np.nan]
})
print(type(data))
print(data)
print(data['age'])
# 处理缺失项值
# data['age'].fillna(data['age'].mean, inplace=True)
# data['gender'].fillna(data['gender'].mode()[0], inplace=True)
# 数据转换,将性别MheF转化为0和1
data['gender'] = data['gender'].map({'M': 0, 'F': 1})
# 数据规范化,将年龄规范到0-1之间
data['age'] = (data['age'] - data['age'].min()) / (data['age'].max() - data['age'].min())
print(data)
'''
Series 一维数据结构
'''
s = pd.Series()
print(s)
# 使用默认索引,创建Series序列对象
data = np.array(['a', 'b', 'c', 'd'])
s = pd.Series(data)
print(s)
# 自定义索引标签
s = pd.Series(data, index=[100, 101, 102, 103])
print(s)
# dict创建Series对象
data = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
s = pd.Series(data)
print(s)
print(s['a'])
# Series常用属性
print(s.axes) # 以列表的形式返回所有行索引标签
print(s.dtype) # 返回对象的数据类型
print(s.empty) # 返回一个空的Series对象
print(s.ndim) # 返回输入数据的维度
print(s.size) # 返回数据的元素数量
print(s.values) # 以ndarrary的形式返回Serirs
print(s.index) # 返回一个RangeIndex对象,用来描述索引的取值范围
# series常用方法
print(s.head(3)) # 返回series前n行数据,默认返回前5行
print(s.tail(2)) # 返回series后n行数据,默认后回前5行
print(s.isnull()) # 如果为值不存在或者缺失者返回true
print(s.notnull()) # 如果值不存在或者缺失则返回false
'''
DataFrame是一个表格型数据结构,既有行标签index又有列标签columns,它被成为异构数据表
所谓异构指表格中每列的数据类型可以不同
DataFrame的每一行数据可以看作一个Series结构
Dataframe结构类似excel的表格型,具有行和列,行数和列数允许增加或减少,里面的每一个数据都可以被修改
可以对行和列执行算数运算
'''
a = pd.DataFrame() # 创建一个空的DataFrame
print(a)
a = pd.DataFrame([1, 2, 3, 4, 5, 6]) # 用单列或嵌套列来创建一个DataFrame
print(a)
a = pd.DataFrame([['a', 1], ['b', 2], ['c', 3]], columns=['name', 'age']) # 用嵌套列表来创建一个DAtaFrame
print(a)
a = pd.DataFrame({'name': ['a', 'b', 'c'], 'age': [1, 2, 3]}) # 用字典嵌套列表来创建
print(a)
a = pd.DataFrame([{'a': 1, 'b': 2}, {'a': 2, 'b': 3, 'd': 4}]) # 用列表嵌套字典作为输入来创建DataFrame
print(a)
a = pd.DataFrame({'name': pd.Series(['a', 'b', 'c']), 'age': pd.Series([1, 2, 3])})
print(a)
print(a['name'])
a.insert(2, column='score', value=[91, 90, 98]) # 插入列
a.insert(3, column='score2', value=[95, 96, 98]) # 插入列
print(a)
del a['name'] # 使用del删除列
print(a)
a.pop('age') # 使用婆婆方法删除列
print(a)
print(a.loc[1]) # 标签索引选取行
print(a.loc[1, 'score']) # loc允许接收两个参数分别是行和列,参数之间用逗号分隔
print(a[1:4]) # 切片操作
a2 = pd.DataFrame([['q', 5, 78, 78]], columns=['name', 'age', 'score', 'score2'])
print(a2)
print(a.max)
print(a.min)
print(a.drop(1)) # 使用行索引标签,从dataframe中删除某一行数据
print(a.T) #行和列转置
print(a.axes) #返回一个仅以行轴标签和列轴标签为成员的列表
print(a.dtypes) #返回每列数据类型
print(a.empty) #判断数据对象是都为空
print(a.ndim) #返回数组的维度
print(a.shape)#返回一个元组,表示了dataframe维度
print(a.size) #返回dataframe中元素数量
print(a.values)#使用numppy数组来表示datafeame中的元素
print(a.head(1))#返回前n行数据
print(a.tail(1))#返回后n行数据
print(a.shift(1))#将行和列移动指定的长度