Pandas DataFrame基础知识
本章主要讲述pandas一些Pandas DataFrame的基础知识
1.1简介
Pandas [1] 是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。
1.2加载数据集
1 import pandas as pd 2 # file_path=(r'data/gapminder.tsv') 3 # df=pd.read_csv(r'C:\Users\123\Desktop\pandas_exerices\data\gapminder.tsv',sep=',')#输出的数据其中的符号为, 4 df=pd.read_csv(r'C:\Users\123\Desktop\pandas_exerices\data\gapminder.tsv',sep='\t')#输出的数据多一个table 5 print(df.head())#读取前5行的数据 6 print(type(df))#检查返回的数据是否为DataFrame 7 print(df.shape)#Read the shape of the data, namely rows and columns(rows,columns) 8 print(df.columns)#读取列名 9 print(df.dtypes)#读取每列的dtype 10 print(df.info())#获取更多信息
1.2查看列和行&单元格
1.2.1获取列子集
1 country_1=df['country']#读取数据集中名为country的一列的所有内容并且命名为country_1 2 print(country_1.head())#打印前五列 3 print(country_1.tail())#打印后五列 4 5 subset=df[['country', 'continent', 'year']]#通过列名指定多列 6 print(subset.head())
1.2.2获取行子集
1 print(df.loc[0])#读取第一行,python从0开始计数 2 print(df.loc[99])#读取第100行 3 # print(df.loc[-1])无法读取该数据集,因为该数据集会从搜索-1行 4 number_of_rows=df.shape[0] 5 last_row=number_of_rows-1 6 print(df.loc[last_row]) 7 print(df.tail(n=1))#tail和loc输出的最后一行数据类型不同\
1 #tail和loc输出的最后一行数据类型不同 2 subset_1=df.loc[0] 3 subset_2=df.tail(1) 4 subset_3=df.iloc[0] 5 print(type(subset_2)) 6 print(type(subset_1)) 7 print(type(subset_3))
1.2.2.2
1.2.3混合
1.2.3.1 获取列子集
1 #使用loc获取列子集 2 #注意冒号使用位置 3 #冒号用于选择所有行 4 #df.iloc[:,[列]]获取列子集 5 subset = df.loc[:, ['year', 'pop']] 6 print(subset.head()) 7 #iloc支持使用整数 8 #iloc支持-1选择最后一列 9 subset = df.iloc[:,[1,0,-1]] 10 print(subset.head()) 11 #通过范围选择列子集 12 print("*"*100) 13 small_range =list(range(0,6)) 14 print(small_range) 15 subset = df.iloc[:,small_range] 16 print(subset.head()) 17 18 large_range =list(range(3,6)) 19 print(large_range) 20 subset =df.iloc[:,large_range] 21 print(subset.head()) 22 # super_range =list(range(100)) 23 # subse_big =df.iloc[:,super_range] 24 # print(subse_big.head()) 25 # IndexError: positional indexers are out-of-bounds 26 print(df.columns) 27 subset = df.iloc[:,:3]#获取前三列 28 print(subset.head()) 29 subset = df.iloc[:,3:6]#获取第4 5 6列数据 30 print(subset.head()) 31 subset = df.iloc[:,0:6:2]#2为步长,此处获取的是1,3,5 32 subset = df.iloc[:,0:6:3]#3为步长,此处获取的是1,4列 33 subset = df.iloc[:,::] 34 print(subset.head())
1 #使用loc 2 print(df.loc[42,'country']) 3 #使用iloc 4 print(df.iloc[42,0])
df.iloc[:,:0:6:1]=df,iloc[:,::]=df.iloc[:,0:6:]=df.iloc[:,0::1]=…
1.2.4获取行和列的子集
1 #使用loc 2 print(df.loc[42,'country']) 3 #使用iloc 4 print(df.iloc[42,0])
1 #获取continentpopgdpPercap 2 print(df.iloc[[99,98,64],[1,4,5]]) 3 print(df.loc[[99,98,64],['continent','pop','gdpPercap']]) 4 #注意,在iloc和loc行部分可以使用切片语法 5 print(df.iloc[10:15,[2,4,5]]) 6 print(df.loc[10:15,['year','pop','gdpPercap']])
1.4分组和聚合计算
1.4.1分组方式
1 #分组计算 2 print(df.groupby('year')['lifeExp'].mean()) 3 #详细解释 4 groupby_year_df=df.groupby('year') 5 print(groupby_year_df) 6 print(type(groupby_year_df)) 7 #step2 8 print("*"*100) 9 groupby_year_df_lifeExp=groupby_year_df['lifeExp'] 10 print(groupby_year_df_lifeExp) 11 print(type(groupby_year_df_lifeExp)) 12 13 mean_lifeExp_by_year=groupby_year_df_lifeExp.mean() 14 print(mean_lifeExp_by_year)
#计算每个国家的平均寿命 print(df.groupby('country')['lifeExp'].mean().head(10))
#计算国家gdp和平均年龄 print(df.groupby(['year','continent'])[['lifeExp','gdpPercap']].mean())
#平铺数据 falt=df.groupby(['year','continent'])[['lifeExp','gdpPercap']].mean().reset_index() print(falt)
1.4.2分组频率计数
#计算频率各大洲国家出现的频率 print(df.groupby('continent')['country'].nunique())
1.5基本绘图
1 global_yearly_life_expectancy=df.groupby('year')['lifeExp'].mean() 2 print(global_yearly_life_expectancy) 3 global_yearly_life_expectancy.plot()
Day 2复习
1 import pandas as pd 2 df=pd.read_csv(r'C:\Users\123\Desktop\pandas_exerices\data\housing.csv',sep=',') 3 print(df.head())#读取头文件前5行 4 print(df.columns)#读取列名 5 #计算'Neighborhood'的平均、'Year.Built' 6 year_groupby = df.groupby('Neighborhood')['Year.Built'].mean().reset_index() 7 print(year_groupby) 8 year = df.groupby('Year.Built')['Boro'].nunique() 9 print(year) 10 print(df.iloc[:,::]) 11 print('*'*100) 12 print(df.iloc[:,[1,2,3]])#读取第二三四列 13 print('*'*100) 14 print(df.loc[10:15,['Building.Classification', 'Total.Units', 'Year.Built']]) 15 #读取第10-15行(row+1和'Building.Classification', 'Total.Units', 'Year.Built'列 16 print(df.tail(5))#读取倒数5行