pandas-python数据分析基础知识

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()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值