大数据清洗3(pandas - 基本数据结构)
Posted 晨沉宸辰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据清洗3(pandas - 基本数据结构)相关的知识,希望对你有一定的参考价值。
pandas - 基本数据结构
import numpy as np 、
import pandas as pd
一、series
Series是Pandas包提供的一种Key-value型数据结构,其中Key为用户定义的显示index,每个显式index对
应一个value值.
它与Python列表的区别在于,Series的每个元素都带有两种index
- 显示index : 由用户指定
- 隐式index : 由系统自动分配(Series对象中每个元素的下标,类似Python"列表"的下标)
Series的访问既可以通过显示index,也可以通过隐式index
在数据分析和数据科学项目中,一般用显式索引(index),而不是隐式下标,原因在于:当数据量很大时,很难准确定义其下标
1、创建series
语法如下:
s = pd.Series(data, index=index)
其中 data 可以是不同的内容:
- Ndarray
- 字典
- 标量
index 是轴标签列表,根据不同的情况传入的内容有所不同。
如果 data 是 ndarray ,则索引的长度必须与数据的长度相同。如果没有入索引,将创建一个值为[0,…,len(data)-1] 的索引。
# 通过数组创建一个series
np.random.seed(1234)
arr1 = np.random.randint(1,10,5)
arr1
ser1 = pd.Series(arr1,index = ["a","b","c","d","e"])
ser1
pd.Series(arr1)
#通过字典创建series
dict1 = {"a":1,"b":2,"c":3}
dict1
ser2 = pd.Series(dict1)
ser2
# 通过标量生成series
pd.Series(3,index=["a","b","c"])
2、series常用属性
ser1
ser1.index
ser1.values
ser3 = pd.Series(arr1,index = ["a","b","c","d","e"],name="data")
ser3
在多数情况下,series 名称会被自动分配,例如在获取 1D 切片的 DataFrame 时。(后续DataFrame操作将会讲解到)
ser3.rename("数值")
ser3
ser3.rename("数值",inplace =True)
ser3
3、series的特性
- Series可以进行索引和切片操作
- Series 同时也像一个固定大小的 dict ,可以通过索引标签获取和设置值
- Series 与 ndarray 非常相似,是大多数 NumPy 函数的有效参数
3.1 series的数组特性
ser1
ser1[0]
ser1[1:4]
ser1[[1,3,4]]
ser1>6
ser1[ser1>6]
ser1
np.exp(ser1)
np.e**4
3.2 series字典特性
ser1
ser1["c"]
ser1[1:4]
ser1["c":"e"]
ser1[["a","c","d"]]
ser1["a"] = 0 #对series中的元素值进行更改
ser1
ser1.get("b","没找到")
ser1.get("k","没找到")
3.3 矢量化和标签对齐
ser1
ser5 = pd.Series([1,2,3,4,5],["a","b","c","d","e"])
ser5
ser1+ser5 #基于标签对齐并且进行是量化运算
ser1
ser6 = pd.Series([1,2,3,4,5],["a","b","k","d","n"])
ser6
ser1+ser6
二、DataFrame
DataFrame是一个可以包含不同数据类型列的二维数据结构,类似于电子表格或SQL表,或Series对象
的字典集合,是最常用的pandas对象。
1、创建DataFrame
和 Series 类似,创建 DataFrame 时,也接受许多不同类的参数。虽然在绝大多数情况下,我们通过读
取文件来创建 DataFrame。 DataFrame 可以从序列类的数据构建
1.1 通过数组创建dataframe
arr = np.random.randint(1,100,(3,7))
arr
#通过数组创建dataframe
pd.DataFrame(arr,index=["a","c","b"],columns=["A","B","C","D","E","F","G"])
1.2 通过字典创建dataframe
#通过字典创建dataframe
dict1 = {"员工姓名":["赵一","钱明","周元"],
"销售业绩":[30000,20000,50000],
"提成收入":[6000,4000,10000]}
dict1
df1 = pd.DataFrame(dict1)
df1
#通过字典创建dataframe
dict2 = {"员工姓名":["赵一","钱明","周元"],
"销售业绩":[30000,20000],
"提成收入":[6000,4000,10000]}
dict2
# pd.DataFrame(dict2)
#通过字典创建dataframe
dict3 = {"员工姓名":pd.Series(["赵一","钱明","周元"],
index=["001","002","003"]),
"销售业绩":pd.Series([30000,20000],index=["001","002"]),
"提成收入":pd.Series([6000,4000,10000],index=["001","002","003"])}
dict3
df2 = pd.DataFrame(dict3)
df2
df2.index
df2.columns
2、dataframe的列操作
DataFrame 列的选取,设置和删除列的工作原理与类似的 dict 操作相同。
df2
2.1 增加列
df2["基本工资"] = 2500 #通过一个标量添加一整列信息
df2
df2["创造收益"]=df2["销售业绩"]-df2["提成收入"]-df2["基本工资"] #通过其他列的运算得到新的一列
df2
df2["是否达标"] = df2["创造收益"]>20000
df2
df2["性别"] =pd.Series(["女","男"],index=["001","003"])
df2
#insert插入列
df2.insert(6,"年龄",[25,27,30])
df2
2.2 删除列
df2.pop("年龄")
df2
del df2["性别"]
df2
df2.drop(columns=["是否达标","基本工资"],inplace=True)
df2
df2.drop(index=["001","003"])
3、索引/选择
df2["基本工资"] = 2500 #通过一个标量添加一整列信息
df2["性别"] =pd.Series(["女","男"],index=["001","003"])
df2["是否达标"] = df2["创造收益"]>20000
df2.insert(6,"年龄",[25,27,30])
df2
3.1 基于标签的索引
df.loc[行索引信息(标签),列索引信息(标签)]
- 如果只索引行信息,所有列信息都保留,索引语法中的列索引信息可以省略
- 如果只索引列信息,所有行信息都保留,索引语法中的行索引信息不可以被省略,写冒号加逗号表示所有行 信息都保留
df2.loc["001"]
df2.loc["001","员工姓名":"创造收益"]
df2.loc["001":"002","员工姓名":"创造收益"]
df2.loc["004"] = ["李雷",60000,12000,np.nan,2500,"男",24,False]
df2
df2.loc[["001","002","004"]]
df2.loc[:,["员工姓名","是否达标"]]
df2.loc[["001","002","004"],"员工姓名":"基本工资"]
# df2.loc[["员工姓名","是否达标"]]
3.2 基于位置的索引
df.iloc[行索引,列索引]
- 如果只索引行信息,所有列信息都保留,索引语法中的列索引信息可以省略
- 如果只索引列信息,所有行信息都保留,索引语法中的行索引信息不可以被省略,写冒号加逗号表示所有行 信息都保留
df2
df2.iloc[1]
df2.iloc[1]
df2.iloc[:,-1]
df2.iloc[1:3] #基于位置的切片,终止值是切不到的
df2.loc["002":"003"] #基于标签的切片,终止值会被切到
df2
df2.iloc[0:3,0:4]
df2.iloc[[1,3],[0,2,3]]
3.3 布尔索引
df2[df2.提成收入>=10000]
- & 表示并且,两个条件必须都满足
- | 表示或者,满足任意条件都可以
df2[df2.年龄 >25]
#年龄大于25并且提成收入超过1w的员工
df2[(df2.提成收入>=10000) & (df2.年龄 >25)]
#年龄大于25或者提成收入超过1w的员工
df2[(df2.提成收入>=10000) | (df2.年龄 >25)]
以上是关于大数据清洗3(pandas - 基本数据结构)的主要内容,如果未能解决你的问题,请参考以下文章