pandas学习笔记

用到的学习资料

https://www.jianshu.com/p/f7db07e0c769

https://www.jianshu.com/p/d630c14d3ea0

https://www.jianshu.com/p/66bcd5582253?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

https://www.jianshu.com/p/161364dd0acf?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

sklearn,交叉验证https://www.jianshu.com/p/731610dca805

 

用pandas读取csv文件

import pandas as pd
import numpy as np
df=pd.read_csv(r'C:\Users\pc\Desktop\cancer_null.csv',header=None,sep=',')#seq是分隔符
print (df.head())#默认打印前五行
print (df.tail())#默认打印后五行
#重命名各个标题
df=pd.read_csv('filename',header=None,sep='',names["week",'month','date','time','year','name1','freq1','name2','freq2','name3','data1','name4','data2']) 
print(df)


 

错误:    df=pd.read_csv('C:\Users\pc\Desktop\cancer_null.csv',header=None,sep=',')
                  ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

注意windows输入路径要注意防转义  r' 路径 ',或将\改成/或者\\


#通过等⻓长字典创建
DataFrame data={'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]} 
frame=DataFrame(data) 
DataFrame(data,columns=['c','b','a'])#指定顺序
frame2=DataFrame(data,index=['a','b','c'])
frame['a'] 
返回指定的列,行名是1
frame.loc['1'] 
#返回指定的⾏,第一行
frame.iloc[1] 

data=DataFrame(np.arange(12).reshape(3,4),columns=['a','b','c','d'])

返回列数:

df.shape[1]

返回行数:

df.shape[0]

第二题解决方法(把列名为2的列中值为‘M’的改成1,为‘B’的改成0)

 

老师的方法是replacehttp://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html

df.loc[df[2]=='M',2]=1

df.loc[df[2]=='B',2]=0


df.loc[df[2]=='M',2]=1
df.loc[df[2]=='B',2]=0

#方法来源

In [16]: df.loc[(df['BBB'] > 25) | (df['CCC'] >= 75), 'AAA'] = 0.1; df
Out[16]: 
   AAA  BBB  CCC
0  0.1   10  100
1  5.0   20   50
2  0.1   30  -30
3  0.1   40  -50

作者:default
链接:https://www.jianshu.com/p/f7db07e0c769
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

基本的统计分析函数:适用于Series和DataFrame类型数据

方法

说明

.sum()

计算数据的总和,按0轴计算,下同

.count()

非NaN值的数量

.mean()   .median()

计算数据的算术平均值、算术中位数

.var()  .std()

计算数据的方差、标准差

.min() .max()

计算数据的最小值、最大值

.describe()

针对0轴(各列)的统计汇总

问题:means()和var()没有MB转换成01的那一列数据,median()有

调用方法上:df.sum()、df.sum(axis=1)分别是按列和行求和

画直方图

划重点:df[key].hist()

批量保存到本地:df[i].hist(color='g',alpha=0.5,bins=620).get_figure().savefig(r'C:\Users\pc\Desktop\pic\{}.jpg'.format(i))

getfigure().savefig()是用于保存的,不写直接显示

遇到的问题,保存的都是第一张图

 

#-*- coding:utf-8 -*-
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.rand(100,4),columns=list('abcd'))
d=df['a'].hist().get_figure()
d.savefig('2.jpg')
 

 

数据清洗

删除非NAN少于33的行:df.dropna(thresh=33)

数据填充

 df_full=df_full.fillna(method='ffill',limit=3)

bfill是用后面的数据填充,limit是向前最多搜寻3次

删除不完整的行

假设我们想删除任何有缺失值得行。这种操作太据侵略性,但是我们可以根据我们的需要进行扩展。

删除任何包含 NA 值的行是很容的:

data.dropna()

查看df有多少个nan


in:  df.shape[0]-df.count()
Out[27]: 
时间               0
小区名              0
小区房屋出租数量      1001
楼层               0
总楼层              0
房屋面积             0
房屋朝向             0
居住状态        176401
卧室数量             0
厅的数量             0
卫的数量             0
出租方式        172309
区               31
位置              31
地铁线路        104761
地铁站点        104761
距离          104761
装修情况        178047
月租金              0
dtype: int64

当然,我们也可以删除一整行的值都为 NA:

data.dropna(how='all')

 

我们也可以增加一些限制,在一行中有多少非空值的数据是可以保留下来的(在下面的例子中,行数据中至少要有 5 个非空值)

data.drop(thresh=5)

 

比如说,我们不想要不知道电影上映时间的数据:

data.dropna(subset=['title_year'])

 

上面的 subset 参数允许我们选择想要检查的列。如果是多个列,可以使用列名的 list 作为参数。

 

删除不完整的列

我们可以上面的操作应用到列上。我们仅仅需要在代码上使用 axis=1 参数。这个意思就是操作列而不是行。(我们已经在行的例子中使用了 axis=0,因为如果我们不传参数 axis,默认是axis=0。)

删除一正列为 NA 的列:

data.drop(axis=1, how='all')

删除任何包含空值的列:

data.drop(axis=1. how='any')

这里也可以使用像上面一样的 threshold 和 subset,更多的详情和案例,请参考pandas.DataFrame.dropna。

 

pandas.ffill()是用同一列的上一条记录填充下一条

 

获取单个元素df[列][行]

df_full.shape获得的是行列

df_full.shape[0]行

df_full.shape[1]列

 

遍历dataframe

for row in range(1,df_full.shape[0]):
    for col in range(1,df_full.shape[1]):
        print(df_full[col][row])

pandas学习笔记_第1张图片pandas学习笔记_第2张图片

 

 

8.1更新

lambda表达式,非常好用

 df.apply(lambda x:(x-x.mean())/x.var())就可以完成数据标准化,x应该是一个临时变量

昨天的问题解决了,原因在于读取文件时,index_col和header没有致成0,置零是说以第0行,0列为索引,统计时就不对索引进行操作,只对数据本身

以后有行列索引就这样读数据 

df=pd.read_csv(r'C:\Users\pc\Downloads\2ed assignment\cancer_null.csv',header=0,sep=',',index_col=0)

发现只有619*32

pandas学习笔记_第3张图片

之前的pandas学习笔记_第4张图片那个Nan是上面那个图的空格,外面一圈是索引

df_full[2].values问题是通过这个命令找到的,取出第3 列所有值,发现第一个是‘1’object,然后发现这个其实是索引

 

去掉首行列后,如何看行列的索引?

df.columns,特征的索引

df.index样本的索引(真正的索引,上面那个不叫索引,叫列名)

你可能感兴趣的:(机器学习)