Pandas详解二之DataFrame对象

xiaoxiao2021-02-28  41

约定 import pandas as pd from pandas import DataFrame import numpy as np

DataFrame

DataFrame是一个表格型的数据结构,既有行索引(保存在index)又有列索引(保存在columns)。

一、DataFrame对象常用属性:

创建DateFrame方法有很多(后面再介绍),最常用的是直接传入一个由等长列表或Numpy组成的字典: dict1={"Province":["Guangdong","Beijing","Qinghai","Fujiang"], "year":[2018]*4, "pop":[1.3,2.5,1.1,0.7]} df1=DataFrame(dict1) df1 代码结果: Provincepopyear0Guangdong1.320181Beijing2.520182Qinghai1.120183Fujiang0.72018 同Series一样,也可在创建时指定序列(对于字典中缺失的用NaN): df2=DataFrame(dict1,columns=['year','Province','pop','debt'],index=['one','two','three','four']) df2 代码结果: yearProvincepopdebtone2018Guangdong1.3NaNtwo2018Beijing2.5NaNthree2018Qinghai1.1NaNfour2018Fujiang0.7NaN 同Series一样,DataFrame的index和columns有name属性: df2 代码结果: yearProvincepopdebtone2018Guangdong1.3NaNtwo2018Beijing2.5NaNthree2018Qinghai1.1NaNfour2018Fujiang0.7NaN df2.index.name='English' df2.columns.name='Province' df2 代码结果: ProvinceyearProvincepopdebtEnglishone2018Guangdong1.3NaNtwo2018Beijing2.5NaNthree2018Qinghai1.1NaNfour2018Fujiang0.7NaN 通过shape属性获取DataFrame的行数和列数: df2.shape

代码结果:

(4, 4) values属性也会以二维ndarray的形式返回DataFrame的数据: df2.values

代码结果:

array([[2018, 'Guangdong', 1.3, nan], [2018, 'Beijing', 2.5, nan], [2018, 'Qinghai', 1.1, nan], [2018, 'Fujiang', 0.7, nan]], dtype=object) 列索引会作为DataFrame对象的属性: df2.Province

代码结果:

English one Guangdong two Beijing three Qinghai four Fujiang Name: Province, dtype: object

二、DataFrame对象常见存取、赋值和删除方式:

DataFrame_object[ ] 能通过列索引来存取,当只有一个标签则返回Series,多于一个则返回DataFrame: df2['Province'] 代码结果: English one Guangdong two Beijing three Qinghai four Fujiang Name: Province, dtype: object df2[['Province','pop']] 代码结果: ProvinceProvincepopEnglishoneGuangdong1.3twoBeijing2.5threeQinghai1.1fourFujiang0.7 DataFrame_object.loc[ ] 能通过行索引来获取指定行: df2.loc['one']

代码结果:

Province year 2018 Province Guangdong pop 1.3 debt NaN Name: one, dtype: object df2.loc['one':'three'] 代码结果: ProvinceyearProvincepopdebtEnglishone2018Guangdong1.3NaNtwo2018Beijing2.5NaNthree2018Qinghai1.1NaN 还可以获取单值: df2.loc['one','Province']

代码结果:

'Guangdong' DataFrame的列可以通过赋值(一个值或一组值)来修改: df2["debt"]=np.arange(2,3,0.25) df2 代码结果: ProvinceyearProvincepopdebtEnglishone2018Guangdong1.32.00two2018Beijing2.52.25three2018Qinghai1.12.50four2018Fujiang0.72.75 为不存在的列赋值会创建一个新的列,可通过del来删除: df2['eastern']=df2.Province=='Guangdong' df2 代码结果: ProvinceyearProvincepopdebteasternEnglishone2018Guangdong1.32.00Truetwo2018Beijing2.52.25Falsethree2018Qinghai1.12.50Falsefour2018Fujiang0.72.75False del df2['eastern'] df2.columns

代码结果:

Index(['year', 'Province', 'pop', 'debt'], dtype='object', name='Province') 当然,还可以转置: df2.T EnglishonetwothreefourProvinceyear2018201820182018ProvinceGuangdongBeijingQinghaiFujiangpop1.32.51.10.7debt22.252.52.75

三、多种创建DataFrame方式

调用DataFrame()可以将多种格式的数据转换为DataFrame对象,它的的三个参数data、index和columns分别为数据、行索引和列索引。data可以是:

1 二维数组

df3=pd.DataFrame(np.random.randint(0,10,(4,4)),index=[1,2,3,4],columns=['A','B','C','D']) df3 代码结果: ABCD19846257743630244698

2 字典

行索引由index决定,列索引由字典的键决定

dict1

代码结果:

{'Province': ['Guangdong', 'Beijing', 'Qinghai', 'Fujiang'], 'pop': [1.3, 2.5, 1.1, 0.7], 'year': [2018, 2018, 2018, 2018]} df4=pd.DataFrame(dict1,index=[1,2,3,4]) df4 代码结果: Provincepopyear1Guangdong1.320182Beijing2.520183Qinghai1.120184Fujiang0.72018

3 结构数组

其中列索引由结构数组的字段名决定

arr=np.array([('item1',10),('item2',20),('item3',30),('item4',40)],dtype=[("name","10S"),("count",int)]) df5=pd.DataFrame(arr) df5 代码结果: namecount0b’item1’101b’item2’202b’item3’303b’item4’40 此外可以调用from_开头的类方法,将特定的数据转换为DataFrame对象。例如from_dict(),其orient参数指定字典键对应的方向,默认为”columns”: dict2={"a":[1,2,3],"b":[4,5,6]} df6=pd.DataFrame.from_dict(dict2) df6 代码结果: ab014125236 df7=pd.DataFrame.from_dict(dict2,orient="index") df7 代码结果: 012a123b456

四、将DataFrame对象转换为其他格式的数据

to_dict()方法将DataFrame对象转换为字典,参数orient决定字典元素的类型: df7.to_dict()

代码结果:

{0: {'a': 1, 'b': 4}, 1: {'a': 2, 'b': 5}, 2: {'a': 3, 'b': 6}} df7.to_dict(orient="records")

代码结果:

[{0: 1, 1: 2, 2: 3}, {0: 4, 1: 5, 2: 6}] df7.to_dict(orient="list")

代码结果:

{0: [1, 4], 1: [2, 5], 2: [3, 6]} 类似的还有to_records()、to_csv()等

谢谢大家的浏览, 希望我的努力能帮助到您, 共勉!

转载请注明原文地址: https://www.6miu.com/read-2620057.html

最新回复(0)