python+pandas+numpy基础学习

1、python学习

(根据 廖雪峰的官方网站   https://www.liaoxuefeng.com/wiki/1016959663602400 学习)

1.1 python基础

1.1.1 在命令行键入 python 可进入交互模式,可以直接运行键入的代码,运行文件需要先cd进入文件所在目录

1.1.2 输入:

 

2、pandas学习

(根据 https://www.kesci.com/home/project/5a8afe517f2d695222327e14 学习)

2.1 基础

from pandas import pd

data=pa.read_csv(path,sep='\t')#path可以是本地也可以是网址,可以是txt,只需要告诉是什么隔开的
data.head(10) #!head本质是Series所以可以index 输出前20个样例,里面什么也不写head()默认是前10个
data.tail()#后10个
data.shape #(行数及几个样例,列数及几个属性)
data.info() # data的class是Dataframe,rangeindex和data columns
data.columns #Index(['','',''],dtype='object)
data.index # RangeIndex(start stop step)
data['a'].unique() #查看a列的唯一值
c=data.groupby('a') #整个数据按照a这个属性分组,但是这个时候c.head()和之前是一样的,在内部分组d=c.sum() #按照刚刚分组的要求来sum,把每一组的其他属性值会相加。如果不写groupby是把所有的当作一组。
e=d.sort_values(['b'],ascending=False) #按照属性降序排序

 

index=pd.date_range('1/1/2000',periods=118)
'''
结果为DatetimeIndex(['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04',
               '2000-01-05', '2000-01-06', '2000-01-07', '2000-01-08',
               '2000-01-09', '2000-01-10',
               ...
               '2000-04-18', '2000-04-19', '2000-04-20', '2000-04-21',
               '2000-04-22', '2000-04-23', '2000-04-24', '2000-04-25',
               '2000-04-26', '2000-04-27'],
              dtype='datetime64[ns]', length=118, freq='D')
'''
#pandas有两种数据类型 
#Series相当于数组numpy.array类似(在操作上),它是有索引(所以也像一个dict),如果我们未指定索引,则是以数字自动生成。
s=pd.Series(np.random.randn(3),index=['a','b','c'])
#DataFrame相当于表格,有行表头和列表头
df=pd.DataFrame(np.random.randn(118,3),index=index,columns=s) #默认是s里的数值
df=pd.DataFrame(np.random.randn(118,3),index=index,columns=s.index)
df=pd.DataFrame(np.random.randn(118,3),index=index,columns=['A','B','C'])
df.columns=[x.lower() for x in df.columns] #把列名变成小写的
row=df.iloc[1] #第一行
col=df['a'] #a列
df.sub(row,axis='columns') #整个表格里每一个行都减去row的值
df.sub(col,axis='index') #整个表格里每一个列都减去col的值
dollarizer = lambda x: float(x[1:-1])
chipo.item_price = chipo.item_price.apply(dollarizer)#将一个dataframe里item_price列的值去掉第一个字符剩下的转为float,原来的是$1.01这样的

 2.2 实战

'''现在有一个菜单的表格
info如下:

RangeIndex: 4622 entries, 0 to 4621
Data columns (total 5 columns):
order_id              4622 non-null int64  点餐的序号
quantity              4622 non-null int64  点了几个东西 一样的东西是一列不一样东西是不同列,同一个人点点餐序号相同
item_name             4622 non-null object 点的东西的名字
choice_description    3376 non-null object 形容
item_price            4622 non-null object 单价
dtypes: int64(2), object(3)
'''
#想知道哪个东西被点的次数最多
c=chipo.groupby('item_name')
c=c.sum()
c=c.sort_values(['quantity'],ascending=False).iloc[0]
#想知道平均每个餐画多少钱
chipo['revenue'] = chipo['quantity'] * chipo['item_price']
chipo.groupby(by=['order_id']).sum().mean()['revenue'] #mean放属性前后效果是一样的
#有几个食物卖出去了
chipo.item_name.value_counts().count()

#
dollarizer = lambda x: float(x[1:-1])
data.item_price = data.item_price.apply(dollarizer)#price是¥10.22格式的,将¥去掉
#看有几个物品大于10块钱
data.drop_duplicates(['item_name','quantity'])
[data.quantity==1][data.item_price>10].item_name.unique() #先去重复项,之后找
# index_col是指定哪一列作为行的索引,不指定默认自己新开一列从0开始 
# header是指定列名的,默认将使用 names作为列名,如果heander指定特定行,则使用names作为替代
data=pd.read_csv("a.csv",sep='|',index_col='user_id')  #用user_id这个属性作为Index
data.occupation.unique() 把该列的值不重复显示出来,加一个n就是数量
data.occupation.nunique()
data. occupation.value_counts().count() #也可以知道这个属性的不重复的值的数量。不过这个函数可以找到这个属性值出现最多次数的那个值和个数
data. occupation.value_counts().head(1).index[0] #出现最多次数的那个值 
data.describe()  #默认的相当于 data.describe(include=[np.number])只把有数字的进行计算
data.describe(include='all')
data.occupation.describe()
data.age.mean() #age的均值
data.groupby('age').a.agg(['mean', 'min', 'max'])#按照age分组,每个组对a这个属性得到'mean', 'min', 'max'三个参数
data.age.value_counts().tail().index #age里面出现次数最少的那些值
data.groupby(['age']).size()[7] #age里面7出现的次数
data.groupby(by=['age'])['a'].mean().sort_values(ascending=False)[0]#按照age分组之后,将每组的a这个属性求均值,得到的结果降序显示,则平均值最大的是0号
food.iloc[:,[105]].dtypes #找到第105列的所有值,并且输出他是什么类型的,或者food.dtypes['a']
food.iloc[18]['product_name']
d.sort_values(by=['R', 'Y'],ascending=False)#先以R排序再以Y排序
round(discipline['Y'].mean(),2) #求均值,保留两位小数
data[data.Team.str.startswith('G')].Team #找到以G开头的
data.iloc[:-3] #
data.loc[data.Team.isin(['E', 'I', 'R']), ['Team','A']] #输出Team名字是E,I,R的Team和A
army=pd.DataFrame(raw_data,columns = ['regiment', 'y'] #建立一个DataFrame,并且给列起名
data=pd.DataFrame(raw_data,columns=raw_data.keys())
army=army.set_index('y')#按照列y作为每一行的Index
#如果已经是index了,那么y里的值就可以之间索引。而在使用loc的适合不能用0,1,2,3索引了
army.loc[['M','A'],[ 'deaths', 'size' , 'deserters' ]]#例如y里存在值M,A,就可以直接索引到M,A
army.iloc[3:7,3:6] #使用iloc的时候还是用的1/2/3
army[ (army.deaths>500) | (army.deaths<50) ]  #一定要加()  与 是&
army.columns.get_loc('deaths') #找到名字是deaths的列的序号
army.loc['Arizona'].iloc[2] #Select the third cell in the row named Arizona

 

3、numpy学习

(根据菜鸟教程 https://www.runoob.com/numpy/numpy-tutorial.html 学习)

 

你可能感兴趣的:(python+pandas+numpy基础学习)