用Python做数据分析,Numpy,Pandas,matplotlib是怎么也绕不开的三个包。
10分钟了解pandas。
导入包
import pandas as pd
import numpy as np
导入数据
#默认utf-8,gbk对中文的支持更好
pd.read_csv(filename,encoding='gbk')
#key是列名,value是数据,从字典导入数据需要指定index
dict1 = {'a':1,'b':2}
df = pd.DataFrame(dict1,index=[0])
查看数据
#行数、列数
df.shape[0]
df.shape[1]
#前几行,后几行,默认为5
df.head()
df.tail(3)
#数据汇总统计
df.describe()
#数据概况
df.info()
#列名
df.columns
#数据类型
df.dtypes
#各列平均值
df.mean()
数据选取
#按列名查看某列
df[col_name]
df.col_name
#查列名看多列
df[[col1,col2]]
#按索引查看某行,第一行:
df.iloc[0]
#按索引查看某行某列,三行四列那个元素
df.iloc[2,3]
数据合并
#按行拼接
pieces = [df[2:20],df[23:30],df[35:40]]
#按列拼接
left = pd.DataFrame({'key': ['foo', 'bar'], 'col1': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'bar'], 'col2': [4, 5]})
pd.merge(left,right,on='key')
#增加一列
df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])
extra = df.iloc[-1]
data = df.append(extra)
数据清理
#检查是否空值,返回布尔值(True,False)
df.isnull()
#返回各列空值的个数
df.isnull().sum()
#处理空值,用x替换空值
df = df.fillna(x)
#删除包含空值的行
df = df.dropna()
#删除包含空值的列
df = df.dropna(axis=1)
数据处理
#选择某列大于1的行
df[df[colname]>1]
#选择某列包含x或者y字段的行,pandas有很多字符串处理函数
df[df[colname].str.contains(x|y)]
#转换数据类型
df.num = df.num.astype(float)
#查看某列的唯一值的个数
df.colname.value_counts()
#按照某列排序(默认升序)
df.sort_values(by = colname,ascending=True)
#应用函数,简单的可以用lambda
df.apply(lambda x:x.max()-x.min())
#复杂的可以先定义好函数
def func():
pass
df.apply(func)
#也可以用numpy自带的,例如cumsum累加
df.apply(np.cumsum)
分组聚合
#准备数据
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'], 'B' : ['one', 'one', 'two', 'three','two', 'two', 'one', 'three'], 'C' : np.random.randn(8), 'D' : np.random.randn(8)})
#对两列进行分组并求均值,类似于SQL里的group by
df.groupby(['A','B']).mean()
#数据透视表,以col1为行,col2为列,取col3和col4的最大值,可以参考Excel的数据透视表
df.pivot_table(index=col1,columns=col2,values=[col3,col4],aggfunc=max)
