day20 学习笔记
文章目录
- 前言
- 一、Pandas介绍
- 二、创建Series对象
- 1.创建空Series对象
- 2.数据容器创建Series对象
- 3.Numpy数组创建Series对象
- 三、访问Series对象元素
- 1.标签索引访问
- 2.遍历Series对象元素
- 四、创建Dataframe对象
- 1.创建Dataframe空对象
- 2.使用嵌套创建Dataframe对象
- 五、Dataframe对象的增删改查
前言
- 通过今天的学习,我掌握了Python的第三方库Pandas的基本操作,包括创建Pandas的Series对象,Dataframe对象以及增删改查操作
一、Pandas介绍
Pandas 在 ndarray 数组(NumPy 中的数组)的基础上构建出了两种不同的数据结构,分别是 Series(一维数据结构)、DataFrame(二维数据结构):
- Series 是带标签的一维数组,这里的标签可以理解为索引,但这个索引并不局限于整数,它也可以是字符类型,比如 a、b、c 等
- DataFrame 是一种表格型数据结构,它既有行标签,又有列标签
- Dataframe的每一行或每一列都可以看作是一个Series
- 当从Dataframe中取某一列时,此时它的标签是Dataframe的行标签;取一行时同理
- Pandas属于Python的第三方库,使用时需要导包
二、创建Series对象
- pandas.Series(data,index,dtype)
- index:指定索引标签;dtype:指定数据类型
1.创建空Series对象
s = pd.Series()
print(s)
2.数据容器创建Series对象
arr = {"name":"xiaohu","age":20}
s = pd.Series(arr)
print(s)
arr = [1,2,3]
s = pd.Series(arr)
print(s)
3.Numpy数组创建Series对象
arr = np.arange(3)
s = pd.Series(arr,index=["num 1","num 2","num 3"])
print(s)
三、访问Series对象元素
1.标签索引访问
arr = [1,2,3,4,5,6]
s = pd.Series(arr)
print(s[1]) #通过标签访问
print(s[:2]) #通过下标切片访问,不包含结尾索引
arr = np.arange(3)
s = pd.Series(arr,index=["num 1","num 2","num 3"])
print(s["num 1":"num 2"]) #通过标签切片访问,包含结尾索引
tips:对于Series对象,如果对象创建时没有指定index,则访问时会下标而非标签进行访问,涉及到结尾索引对应的元素是否被包含的问题
2.遍历Series对象元素
- Pandas专门提供了items方法以及index,values属性来访问Series对象中的元素
for index,value in s.items(): #items方法
print(index,value)
for index in s.index: #index属性
print(index)
for value in s.values: #values属性
print(value)
四、创建Dataframe对象
- Dataframe作为Pandas的基本数据结构,可以理解为一个二维的表格,每一行以及每一列都可以理解为一个Series对象
- pd.DataFrame( data, index, columns, dtype, copy)
- index:行标签;colums:列标签
1.创建Dataframe空对象
df = pd.DataFrame()
print(df)
2.使用嵌套创建Dataframe对象
#列表嵌套字典
data = [{'name': "张三", 'age': 18},{'name': "小红", 'gender': "男", 'age': 19}]
df = pd.DataFrame(data=data)
#字典嵌套列表
#value数组的长度要求一致
data = {"name":['小米','小红','小紫'],"age":[18,19,20]}
df = pd.DataFrame(data=data)
#Series创建Dataframe
#字典嵌套Series
#长度不一致使用NAN填充
data = {'one': pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two': pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(data=data)
五、Dataframe对象的增删改查
- 直接添加数据
data = {"name":['小米','小红','小紫'],"age":[18,19,20]}
df = pd.DataFrame(data=data)
df["sex"] = None #添加空列
df["sex"] = ["M","FM","FM"] #赋值添加新列
- assign()
- 链式调用,添加列并返回新的Dataframe而不改变原来的Datafram
f1 = df.assign(sex1=["M","FM","FM"])
print(df1)
- insert()
- 在指定位置插入数据
- loc:插入位置的索引下标而非列标签;column:新列名;value:插入的值
df.insert(3,"sex3",["M","FM","FM"])
print(df)
- 直接修改数据
data = {'one': pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two': pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(data=data)
df['two'] = pd.Series([2,3,4,5],index=['a','b','c','d'])
df['two'] = pd.Series([2,3,4,5])
tips:以上两个语句都修改df的"two"列,但一个指定了标签而另一个没有,没有指定标签会导致Pandas无法找到修改的位置而使得该列变为NAN
- df.colums()
- 在原对象的基础上修改列名
df.columns = ["1","2"]
print(df)
- df.rename()
- 改列名,返回新的Dataframe不影响原对象
df1 = df.rename(columns={"1":"fri","2":"sed"})
print(df1)
- 修改数据类型
df["1"] = df["1"].astype(np.float16)
print(df['1'][1]) #<class 'numpy.float16'>
THE END