1.准备工作:
编程环境准备:
from pandas import read_csv,to_csv
from pyecharts import Bar,Line,Pie,Scatter
文件准备:
from pandas import read_csv
df=read_csv("f://one.csv",sep=",")
print(df)
2.数据处理:
数据导入导出:
导入
import pandas as pd
df=pd.read_csv("f://one.csv",sep=",")
print(df)
导出
df.to_csv("g://one.csv",sep=",")
行:
df1=df[df.one==2016114284]
printf(df1)
列:
改列名:
df.columns=['one','two']
新增一列:
df['three']=0
删一列:
del df['three']
print(df)
注意的是,当涉及到,表结构变化的时候,列的引用要使用,【】,且“ columnname”,加引号。
数据类型转换:
查看数据类型:
print(df.two.dtypes)
转换数据类型:
df.two=df.two.astype(int)
print(df.two)
或者是:
df.two=df.two.astype(object)
print(df.two)
数据的处理:
计算数值:
df['three']=df.one*df.two
筛选数值:
df=df[df.one>=100]
print(df)
1.拆:
df2=df.one.str.split('\t',1,True)
2.合:多列合为一列:
df['three']=df.one+df.two
表记录的合并:df1=df1.append(df2.ignore_index=True)
表格的合并:df=pandas.merge(df1,df2,left_on='one',right_on='four')
3.取:# df1.two=df1.two.str.slice(2,5)
4.去:df.one=df.one.str.strip()
注意:对于数据的处理时,数值的比较容易,需要注意的是字符串的处理。 而且,要加上=进行赋值
数据清洗:
重复:则删
df=df1.drop_duplicates()
缺失:则以均值代替
df1=df1.fillna(df1.mean())
注意:这是对表格的操作,而不是对某一列的操作。
分段:
bins=[df1.two.min()-1,500,df1.two.max()+1]
labels=['500以下','500以上']
df1['four']=pandas.cut(df1.two,bins,labels=labels)
注意:分段的目的是为了下一步的分组
3.数据统计:
基本的统计:
import pandas as pd
df=pd.read_csv("f://one.csv",sep=",")
print(df)
描述
print(df.chinese.describe())
求和,数量,均值
print(df.chinese.sum())
print(df.chinese.size)
print(df.chinese.mean())
最值
print(df.chinese.max())
print(df.chinese.min())
方差,标准差
print(df.chinese.std())
print(df.chinese.var())
注意:针对的是某一列
分组:
from pandas import read_csv
import pyecharts
df=read_csv("f://one.csv",sep=",")
df1=df.groupby(by=["sex"]).agg({ "chinese":['sum','size','mean' ] })
print(df1)
如果是两个的话,就是
df1=df.groupby(by=["sex"]).agg({ "chinese":['sum','size','mean' ],
"math": ['sum', "size", 'mean']
})
注意:这是统计某一列和另一列的关系。
思路:原始数据(DataFrame系列)---统计表--数据结构格式化(DataFrame系列)。
当数据非常多的时候,是不可能直接在原始数据直接作图的,需要通过统计得到统计图。然而,得到的统计图的数据结构就变了
不和刚开始的一样,我们需要处理转变统计图的数据结构。最后的表格我们容易使用程序访问特定的列。。。
数据结构发生了什么变化呢?
原始数据的数据结构是由若干的列构成的,程序很容易任意一列。属于Series系列。
统计的另一个目的是为了让数据量减少,减少到可以在图形上显示。所以,常用的思想是分组,聚合。然而,此操作得到的
结果数据结构改变了。属于DataFrame系列。程序访问数据不易操作。
如何将统计表的数据结构恢复到原来的格式。思想是,数据不变,创建一个表格,填充数据。
第一个 是统计表,第二个是原始数据格式的表格样式。
建立一个dataframe结构的表
df4=DataFrame()
提取df1的核心数据,并以列检索,(如果不转置就是以行检索)
df2=df1.values.T
填充数据。
df4["sex"]=df1.index.values
df4["sum"]=df2[0]
df4["sizse"]=df2[1]
df4["mean"]=df2[2]
print(df4)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
访问DataFrame的形状
print(df4.shape)
访问DataFrame的行索引 ,列表形式输出
print(df4.index.values)
访问DataFrame的列索引,列表形式输出
print(df4.columns.values)
访问DataFrame的核心数据,列表形式输出。
print(df4.values)
数据透视表:
4.作图:(pycharts)使用这个库,视觉效果好。
import pandas as pd
from pyecharts import Bar,Line,Pie,Scatter
from pandas import read_csv
import pyecharts
df=read_csv("f://one.csv",sep=",")
print(df)
--------------------------------------------------------------------------
柱状图:
bar=Bar("mean-subject")
bar.add("mean",
['chinese','math','English'],
[df.chinese.mean(),df.math.mean(),df.English.mean()],
mark_point=['min','max'],mark_line=['average'])
bar.render("g://bar.html")
--------------------------------------------------------------------------
折线图:
line=Line("mean-subject")
line.add("mean",
['chinese', 'math', 'English'],
[df.chinese.mean(), df.math.mean(), df.English.mean()],
)
line.render("g://line.html")
--------------------------------------------------------------------------
饼图:
pie=Pie("mean-subject")
pie.add("mean",
['chinese', 'math', 'English'],
[df.chinese.mean(), df.math.mean(), df.English.mean()]
,is_label_show=True)
pie.render("g://pie.html")
--------------------------------------------------------------------------
散点图
scatter=Scatter("mean-subject")
scatter.add("mean",
['10','20','30'],
[df.chinese.mean(), df.math.mean(), df.English.mean()]
)
scatter.render("g://scatter.html")
注意:散点图的坐标都是数值。
完整的程序:
import pandas as pd
from pyecharts import Bar,Line,Pie,Scatter
from pandas import DataFrame
from pandas import read_csv
import pyecharts
# 读取原始表
df=read_csv("f://one.csv",sep=",")
print(df)
# 分段之后的表
bins=[0,60,100]
labels=["fail","pass"]
df["seven"]=pd.cut(df.math,bins,labels=labels)
print(df)
# 分组之后的表
df1=df.groupby(by=["seven"]).agg({"math":["sum","mean","size"]})
print(df1)
# 格式转换之后的表
df5=pd.DataFrame()
df2=df1.values.T
df5["sum"]=df2[0]
df5["mean"]=df2[1]
df5["size"]=df2[2]
df5["seven"]=df1.index.values
print(df5)
# 作图:
bar=Bar("first bar")
bar.add("good",df5["seven"],df5["size"])
bar.render("g://bar.html")