1.pandas基础
# 导入Pandas库 import pandas df = pandas.read_csv('../py/mypythonstudy/gapdata0.csv',encoding="utf-8",sep=',') #df = pandas.read_csv('gapdata0.csv', encoding='utf-8', sep=',') #导入文件 print(df.tail()) #显示后5行 print(df.head()) #显示前5行 #print(df) 显示全部 #df.head(n=3)显示前三行 print(df.shape) #查看行列数。shape返回一个元组(行数,列数),注意:shape属性后加括号会出错 print(df.columns) #获取查看列名 print(type(df)) #type()检查对象类型 print(df.dtypes) #获取每列的数据类型 print(df.info()) #获取更多数据信息
import pandas as pd
#创建数据
name1 = ['wang','sun', 'zhao','li', 'zhang','ai']
age1 = [22, 24, 23, 22, 21, 12]
country1 = ['zaozhuang','yantai', 'linyi','weihai', 'jining','taian']
# 字典中的key值即为csv中列名
df = pd.DataFrame({'name': name1, 'age':age1 ,'country': country1})
# 将DataFrame存储为csv,index表示是否显示行名,default=True
df.to_csv("test.csv", index=False, sep=',')
print(df.head()) #显示前5行 # print(df.tail()) 显示后5行
print(df.shape) #查看行列数。shape返回一个元组,(行数,列数)
print(df.columns) #获取列名
print(type(df)) #type()检查对象类型
print(df.dtypes) #获取每列的类型
print(df.info()) #获取更多数据信息
'''
结果:
name age country
0 wang 22 zaozhuang
1 sun 24 yantai
2 zhao 23 linyi
3 li 22 weihai
4 zhang 21 jining
(6, 3)
Index(['name', 'age', 'country'], dtype='object')
name object
age int64
country object
dtype: object
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 6 non-null object
1 age 6 non-null int64
2 country 6 non-null object
dtypes: int64(1), object(2)
memory usage: 272.0+ bytes
None
'''
2.获取列子集
name_df = df['name'] #选择打印数据中的某一列,列名放入方括号中
subset = df[['name','age']] #选择打印数据中的多列,向方括号内传入一个列表。注意:此时两对方括号嵌套在一起。
import pandas as pd
name1 = ['wang','sun', 'zhao','li', 'zhang','ai']
age1 = [22, 24, 23, 22, 21, 12]
country1 = ['zaozhuang','yantai', 'linyi','weihai', 'jining','taian']
# 字典中的key值即为csv中列名
df = pd.DataFrame({'name': name1, 'age':age1 ,'country': country1})
# 将DataFrame存储为csv,index表示是否显示行名,default=True
df.to_csv("test.csv", index=False, sep=',')
print(df) #打印全部
name_df = df['name'] #使用head()方法,选择打印数据中的某一列的前五行,列名放入方括号中
print(name_df.head())
subset = df[['name','age']] #选择打印数据中的多列,向方括号内传入一个列表。注意:此时两对方括号嵌套在一起。使用tail()方法打印后五行
print(subset.tail())
'''
0 wang
1 sun
2 zhao
3 li
4 zhang
Name: name, dtype: object
name age
1 sun 24
2 zhao 23
3 li 22
4 zhang 21
5 ai 12
'''
3.获取行子集
3.1.通过索引标签(左侧是行号)获取行子集:loc属性
索引标签此时默认是行号,但索引标签不限于行号,索引标签可以看作是行名,可以更改行名。
print(df.loc[[0,2,5]]) #获取多列时,与获取多行相似,两个方括号嵌套
print(df.loc[-1]) # -1获取最后一行会报错 , 可以使用shape查看行列数,通过shape的第一个值,获得最后一个索引。
'''使用导入文件获取数据'''
import pandas
df = pandas.read_csv('D://postgraduatestudies/py/mypythonstudy/gapdata0.csv',encoding="utf-8",sep=',')
print(df) #打印全部
print('-------------分隔----------------')
print(df.loc[0]) #python从0开始计数
print(df.loc[[0,2,5]]) #获取多列时,与获取多行相似,两个方括号嵌套
print('-------------分隔----------------')
#print(df.loc[-1]) ,-1获取最后一行会报错 # 可以使用shape查看行列数,通过shape的第一个值,获得最后一个索引。
#df.shape 返回元组(6,3), df.shape[0]获取第一个数:行数 6
list_name = df.shape[0]
print(df.loc[list_name-1]) #行数减去一,则得到最后一个索引值
print('-------------分隔----------------')
#使用tail默认获取最后五行, 传入1可返回最后一行 ,传入2显示最后两行
print(df.tail(n=1))
print('-------------分隔----------------')
#tail() 与loc输出结果方式不同,因为其返回类型不同,可用 print(type(df.loc[0])) print(type(df.tail(1))) 查看
#loc返回Series类型, tail返回DataFrame
print(type(df.loc[0]))
print(type(df.tail(1)))
3.2.通过行号获取行子集:iloc属性
print(df.iloc[-1]) #iloc可以使用-1获取最后一行
import pandas
df = pandas.read_csv('D://postgraduatestudies/py/mypythonstudy/gapdata0.csv',encoding="utf-8",sep=',')
print(df) #打印全部
print('-------------分隔----------------')
print(df.iloc[2]) #python从0开始计数
print('-------------分隔----------------')
print(df.iloc[[0,2,5]]) #获取多列时,与获取多行相似,两个方括号嵌套
print('-------------分隔----------------')
print(df.iloc[-1]) #iloc可以使用-1获取最后一行
4.混合获取行列子集
4.1.逗号左边是待取子集的行值,右边是待取子集的列值,即df.loc[[行],[列]] 带逗号的方括号嵌套
import pandas
df = pandas.read_csv('D://postgraduatestudies/py/mypythonstudy/gapdata0.csv',encoding="utf-8",sep=',')
print(df) #打印全部
print('-------------分隔----------------')
#df.loc[[行],[列]] 和 df.iloc[[行],[列]] 逗号左边是待取子集的行值,右边是待取子集的列值
#使用:冒号-默认取出所有数据,对行列都适用
print(df.loc[:,['name']]) #loc 索引标签是名。传入整数值会出错。
print('-------------分隔----------------')
print(df.iloc[:,[0]]) #iloc 行号 列号,用数字。传入索引名会出错。
#举例:以下形式都正确
#print(df.iloc[[2],[0]]) #第三行第一列
#print(df.iloc[[2],[0,-1]]) #iloc中-1是选取最后一列
#print(df.iloc[[2],:]) #第三行所有列
4.2.通过范围选择列子集:range()函数
import pandas
df = pandas.read_csv('D://postgraduatestudies/py/mypythonstudy/gapdata0.csv',encoding="utf-8",sep=',')
print(df) #打印全部
print('-------------分隔----------------')
#df.loc[[行],[列]] 和 df.iloc[[行],[列]] 逗号左边是待取子集的行值,右边是待取子集的列值
#range创建数字列表 need_num = list(range(3)) #返回[0,1,2]
#list(range(0,3,2))--2为步长:从0到2间隔2,即取0、2
need_num = list(range(0,3,2))
print(df.iloc[:,need_num])
print(df.iloc[need_num,need_num]) #range函数行列都适用。注意:range函数获取的范围要在数据行列数范围之内。
4.3.使用切片语法(:)获得列子集
range函数与切片对比:
range(2) == :2
range(0,2) == 0:2
range(0,2) == 0:2
import pandas
df = pandas.read_csv('D://postgraduatestudies/py/mypythonstudy/gapdata0.csv',encoding="utf-8",sep=',')
print(df) #打印全部
print('-------------分隔----------------')
#df.loc[[行],[列]] 和 df.iloc[[行],[列]] 逗号左边是待取子集的行值,右边是待取子集的列值
#使用:冒号-默认取出所有数据,对行列都适用
#range创建数字列表 list(range(3)) #返回[0,1,2]...list(range(0,3,2))--2为步长:从0到2间隔2,即取0、2
need_num = list(range(2)) #range(2) ==== :2
print(df.iloc[:,need_num])
print(df.iloc[:,:2])
print('-------------分隔----------------')
need_num = list(range(0,2)) #range(0,2) ====== 0:2
print(df.iloc[:,need_num])
print(df.iloc[:,0:2])
print('-------------分隔----------------')
need_num = list(range(0,3,2)) #range(0,3,2) ===== 0:3:2
print(df.iloc[:,need_num])
print(df.iloc[:,0:3:2])
5.分组与聚合运算
对数据按照某一属性分隔,计算平均值
import pandas
df = pandas.read_csv('D://postgraduatestudies/py/mypythonstudy/gapdata0.csv',encoding="utf-8",sep=',')
print(df) #打印全部
print('-------------分隔----------------')
#对数据按年龄进行分割,获取score列,计算同一个年龄的平均分数值.mean()计算平均值.
en1 = df.groupby('age')['score'].mean()
print(en1)
print('-------------分隔----------------')
#计算频率次数,使用nunique()或者value_counts()方法获取,对比两种方法的不同
en3 = df.groupby('age')['score'].nunique()
print(en3)
en4 = df.groupby('age')['score'].value_counts()
print(en4)
print('-------------分隔----------------')
#对数据按age和name进行分割,获取score与year列。注意:多个变量用方括号[]
en2 = df.groupby(['age','name'])[['score','year']].mean()
print(en2)
print('-------------分隔----------------')
#上方显示 age、name与score、year输出显示不在同一行(存在某种层级结构),使用reset_index()方法平铺
print(en2.reset_index())
'''
name age country score year
0 wang 18 zaozhuang 28.80 1999
1 sun 18 yantai 30.23 2000
2 zhao 23 linyi 24.20 1997
3 li 22 weihai 35.90 1998
4 zhang 21 jining 34.40 2000
5 ai 12 taian 32.20 1996
-------------分隔----------------
age
12 32.200
18 29.515
21 34.400
22 35.900
23 24.200
Name: score, dtype: float64
-------------分隔----------------
age
12 1
18 2
21 1
22 1
23 1
Name: score, dtype: int64
age score
12 32.20 1
18 28.80 1
30.23 1
21 34.40 1
22 35.90 1
23 24.20 1
Name: score, dtype: int64
-------------分隔----------------
score year
age name
12 ai 32.20 1996.0
18 sun 30.23 2000.0
wang 28.80 1999.0
21 zhang 34.40 2000.0
22 li 35.90 1998.0
23 zhao 24.20 1997.0
-------------分隔----------------
age name score year
0 12 ai 32.20 1996.0
1 18 sun 30.23 2000.0
2 18 wang 28.80 1999.0
3 21 zhang 34.40 2000.0
4 22 li 35.90 1998.0
5 23 zhao 24.20 1997.0
Process finished with exit code 0
'''
6.绘图
使用plot()函数(待补充)
import pandas
df = pandas.read_csv('D://postgraduatestudies/py/mypythonstudy/gapdata0.csv',encoding="utf-8",sep=',')
print(df) #打印全部
print('-------------分隔----------------')
#对数据按年龄进行分割,获取score列,计算同一个年龄的平均分数值.mean()计算平均值.
en1 = df.groupby('age')['score'].mean()
print(en1)
#绘图
en1.plot()