数据分析(三)——pandas

本文介绍了Pandas库的基础用法,包括Series的创建与操作,如通过字典创建、设置标签和索引;DataFrame的构建,如行索引、列索引及其排序,以及DataFrame的统计方法、字符串离散化、数据合并(join和merge)和数据分组聚合。此外,还涉及了索引的获取与设置。
摘要由CSDN通过智能技术生成

numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据。

一、Series和读取外部数据

Series:一维,带标签数组

import pandas as pd

t=pd.Series([1,2,31,12,3,4])
print(t)

结果: 

import pandas as pd

t=pd.Series([1,2,31,12,3,4])

#可以设置标签
t1=pd.Series([1,23,2,2,1],index=list("abcde"))
print(t1)
print("*"*20)

#通过字典创建Series
temp_dict={"name":"xiaohong","age":30,"tel":10086}
t3=pd.Series(temp_dict)
print(t3)
#索引
print(t3[0])   #从0开始
print("*"*20)
print(t3[0:2]) #取不连续的

print("*"*20)
print(t3.index)
print("*"*20)
print(len(t3.index))
print("-"*20)
print(t3.values,type(t3))

结果:

 Series对象本质上由两个数组构成。

一个数组构成对象的键(index,索引),一个数组构成对象的值(value),键->值

如何读取外部数据?

import pandas as pd
#pandas读取csv中的文件
df=pd.read_csv("文件名")
print(df)

二、DataFrame 

DataFrame对象既有行索引,又有列索引

行索引,表明不同的行,横向索引,叫index,0轴,axis=0,列索引,表明不同列,纵向索引,叫columns,1轴,axis=1。

  1,DataFrame创建

import numpy as np
import pandas as pd

#DataFrame 的创建
t1=pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))  #index与columns命名标签
print(t1)
print("--"*20)
#用字典创建
t2={"name":["xiaoming","xiangang"],"age":[20,30],"tel":[10086,10010]}
print(pd.DataFrame(t2),type(pd.DataFrame(t2)))

2, DataFrame的索引

1)DataFrame的排序

df_sorted=df.sort_values(by="根据什么排序",ascending=Ture(升序))

2)DataFrame的索引

注意点:

  1. 方括号写数组,表示取行,对行进行操作
  2. 写字符串,表示的去列操作,对列进行操作

如:

df[:20]      df["字符串"]    df[:10]["字符串"]

3)loc与iloc的使用 

import numpy as np
import pandas as pd

#DataFrame 的创建
t1=pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))  #index与columns命名标签
print(t1)
print("--"*20)

#loc通过标签索引行数据
print(t1.loc["a","x"])
print(t1.loc["a",["x","z"]]) #一列多行
#多行多列
print(t1.loc[["a","c"],["x","z"]])

#iloc通过位置获取行数据
print(t1.iloc[0,2])
print(t1.iloc[[1,2],[2,1]])

 

3,pandas 常用的统计方法

 4,字符串离散化

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

file_path="./movie.png"

df=pd.read_csv(file_path)

#统计分类的列表
temp_list=df["Genre"].str.split(",").tolist()  #[[],[],[]]

genre_list=list(set([i for j in temp_list for i in j]))

#构造全为0的数组
zeros_df=pd.DataFrame(np.zeros((df.shape[0],len(genre_list))),columns=genre_list)
print(zeros_df)

#给每个电影出现分类的位置赋值为1
for i in range(df.shape[0]):
    #zeros_df.loc[0,["Sci-fi","mucical"]]=1
    zeros_df.loc[i,temp_list[i]]=1

#print(zeros_df.head(3))

#统计每个分类的电影的数量和
genre_count=zeros_df.sum(axis=0)
print(genre_count)

#排序
genre_count=genre_count.sort_values()
_x=genre_count.index
_y=genre_count.values

#画图
plt.figure(figsize=(20,8),dpi=80)
plt.bar(range(len(_x)),_y)
plt.xticks(range(len(_x)),_x)
plt.show()

结果:

 

5,数据的合并

1)join:默认情况下他是把行行索引相同的数据合并到一起

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

#创建t1
t1=pd.DataFrame(np.arange(10).reshape(2,5),index=list("AB"),columns=list("VWXYZ"))
print(t1)
print("--"*20)

#创建t2
t2=pd.DataFrame(np.arange(12).reshape(3,4),index=list("ABC"))
print(t2)
print("--"*20)

#join合并
t3=t1.join(t2)
print(t3)
print("--"*20)

t4=t2.join(t1)
print(t4)

 结果:

注意:可以发现不同顺序的合并会导致结果不同 

2)merge:按照指定的列把数据按照一定的方式合并到一起

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

#创建t1
t1=pd.DataFrame(np.arange(12).reshape(3,4),index=list("ABC"),columns=list("MNOP"))
t1[:]=1
t1.loc[["A","B","C"],"O"]=list("abc")
print(t1)
print("--"*20)

#创建t2
t2=pd.DataFrame(np.arange(10).reshape(2,5),index=list("AB"),columns=list("YWXYZ"))
t2[:]=0
t2.loc[["A","B"],"X"]=list("cd")
print(t2)
print("--"*20)

#合并之merge
print("默认情况下merge合并效果:")    #默认的合并方式inner,交集
t3=t1.merge(t2,left_on="O",right_on="X")
print(t3)
print("inner效果:")
t4=t1.merge(t2,left_on="O",right_on="X",how="inner")
print(t4)
print("outer效果:")               #outer并集,NaN补全
t5=t1.merge(t2,left_on="O",right_on="X",how="outer")
print(t5)
print("left效果:")                #left,左边为准,NAN补全
t6=t1.merge(t2,left_on="O",right_on="X",how="left")
print(t6)
print("right效果:")                #right,右边为准,NAN补全
t7=t1.merge(t2,left_on="O",right_on="X",how="right")
print(t7)

结果:

 6,数据分组聚合

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

file_path="./movie.csv"
df=pd.read_csv(file_path)

grouped=df.groupby(by="Country")

#DataFrameGroupby可以遍历,也可以调用聚合方法
coutry_count=grouped["Brand"].count()
print(coutry_count["US"])
print(coutry_count["CN"])

 结果:

 注意:grouped是一个DataFrameGroupBy对象,是可迭代的,grouped中的每一个元素是一个元组

DataFrameGroupBy对象很多经过优化的方法:

 7,索引

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

t1=pd.DataFrame(np.arange(12).reshape(3,4),index=list("ABC"),columns=list("WXYZ"))
print(t1)
print("-"*30)
#获取index
print(t1.index)

#重新设置index
print(t1.reindex(list("Abc")))
print("-"*30)

#指定某一列作为index
print(t1.set_index("W"))
print("-"*30)
print(t1.set_index("W",drop=False))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值