[数据分析]dataframe常用语法

1、导入xlsx、csv文件:

df = pd.read_excel(file_path)
df=pd.read_csv()

2、pycharm常常不显示完整的dataframe,为使其显示完整

#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)

3、筛选掉一些不符合要求的样本,reset_index是将删除后的数据重新行索引

df=df.drop( index = (df.loc[(df["name"] == 0)].index))
df.reset_index(drop=True, inplace=True)

4、将某字段的空值修改为0,inplace=True是指在df上进行修改

df = df["name"].fillna(0)
df["name"].fillna(0,inplace=True)

5、手动将连续型变量离散化,比如当name为小明,则修改name值为1,当name为小红,则修改name值为2
regex=True表匹配,只要包含"小明"二字的值都会被修改

df["name"].replace("小明",1,inplace=True,regex=True)
df["name"].replace("小红",2,inplace=True,regex=True)

6、将文本型特征的值离散化为0和1,通常0表示没有,1表示有
逻辑:通常是空值则设置为0,剩下的值不是0则修改为1

df["times"].fillna(0,inplace=True)
for i in df["times"]:
    if type(i) is not int:
       df["times"].replace(i,1,inplace=True)

7、按行/列删除 ,inplace=True代表在原来的df上进行改动
(1)删除列(特征),drop函数默认按行删除,因此按列删除需要加上axis=1的参数

df.drop(["id","name"],axis=1,inplace=True)  # 删除id和name列

(2)按行删除

df.drop([0,4])  # 不加axis参数默认删除行,表示删除第0行和第4行

8、获取特征矩阵和标签矩阵,并输出形状 ,shape返回的是一个元组(行索引,列索引)

X = df.iloc[:, 0:-1]  # 从第一列到倒数第二列
y = df["car_level"]
print(X.shape)
print(y.shape)

(10000, 25)
(10000,)

row,column=df.shape

9、查看y值的分布

y.value_counts()


3    2669
2    1935
1    1567
Name: car_level, dtype: int64

10、获取新的矩阵

X_li=df[["type","job","car","domains"]]

11、将数据写入csv

df.to_csv("E:\\.csv",encoding="utf_8_sig")

12、查看dataframe的缺失分布

print(df.info())

13、绘制特征分布图,查看是否存在正态分布,然后进行正态分布检验

 import missingno as msno
# 柱状图 查看缺失值个数
msno.bar(data.sample(data.shape[0]), figsize=(12, 7))
# 矩阵图 查看缺失值分布情况
msno.matrix(data.sample(data.shape[0]), figsize=(16, 16), width_ratios=(15, 1))
# 热力图 
msno.heatmap(data.sample(data.shape[0]),figsize=(12, 7))

14、缺失值填补
缺失值少:df.dropna(axis=0) 按行删除
缺失值多:(可用KNN插补、随机森林插补、决策树插补、多重插补)
均值 中位数 众数 回归分析
若缺失值是数值型且服从正态分布,则使用该变量在其他所有对象的取值的平均值来填充该缺失值;
若缺失值是数值型但不服从正态分布,则使用中位数填补;
若缺失值是非数值型的,根据统计学中的众数原理,用该变量在其他所有对象的取值次数最多的值来补齐该缺失的变量值。
以上方法的优点在于不会减少样本信息,处理简单,其缺点在于当缺失数据不是随机出现时会产成偏误。

15、dataframe的属性和方法
(1)属性

1、df.empty 
	return True or False
2、df.at 找出指定行索引和列索引的值
	df.at['4','b'] df.at[行索引,列索引]4行第B列
	df.loc[5].at['B'] 这个适用于Series
3、df.T 二维矩阵的转置
4、df.axes  返回一个数据帧的轴
5、df.dtypes 返回数据类型
6、df.iat 
7、df.iloc
8、df.index The index (row labels) of the DataFrame.
9、df.loc 找到指定位置的值 可返回series或者dataframe
10、df.ndim 如果是series则返回1,如果是dataframe则返回2
11、df.shape 返回一个元组
12、df.size 返回一个整形,元素的多少
13、df.style 
14、df.values 返回一个numpy数组

df[]、df.loc[]、df.iloc[]、df.ix[]、df.at[]、df.iat[]的区别
1) 在行(列)选取(单维度选取):df[] 这种情况一次只能选取行或者列,即一次选取中,只能为行或者列设置筛选条件(只能为一个维度设置筛选条件)
2) 区域选取(多维选取):df.loc[],df.iloc[],df.ix[] 这种方式可以同时为多个维度设置筛选条件
3) 单元格选取(点选取):df.at[],df.iat[]准确定位一个单元格

(2)方法

1、s是一个series,s.abs() 可返回每个元素的绝对值
2、df.add(1) 等同于 df+1 即datafrmae的每个元素都加上整形的数字1
3、df.div(10) 除以
4、s.add_prefix/df.add_prefix 如果是series,则行索引名称添加前缀;如果是dataframe,则列索引名称添加前缀
5、s.add_suffix/df.add_suffix 如果是series,则行索引名称添加后缀;如果是dataframe,则列索引名称添加后缀
6、df.agg aggregate的缩写 可按行可按列 可进行sum min mean max运算
7、df.align 
8、df.all 一行或者一列全部为真才为真(均不等于0),一行或者一列有一个为假则为假
9、df.any 一行或者一列有一个为真则为真(这里一般指不为0)则返回真,一行或者一列全部为假(一般指0)才为假。
10、df.append 在一个dataframe后面添加多一个dataframe
11、df.apply 重要的两个参数是传入的函数func和axis 传入的函数会对dataframe的每一行(index)或每一列(column)进行操作,然后返回每一个index或column对应的值,再将这些行(或者列)以及其对应的返回值重新组合成一个dataframe对象,然后作为整个apply方法的返回值返回。
	f=lambda x:x.max()-x.min()
	df1=df.apply(f,axis=1) # 按列计算最大值与最小值之差,返回一个dataframe
12、df.applymap 将括号中的函数应用到df的每个元素
13、df.as_blocks 将dataframe转换为以数据类型为键值的字典
14、df.as_matrix 将dataframe转换为二维数组
15、df.asfreq 
16、df.asof
17、df.assign 给dataframe添加新的一列,并且赋值
18、df.astype dataframe和series修改数据类型 df.astype('int32').dtypes/ser.astype('int32').dtypes
19、df.at_time 提取df中的特定时间点出来df.at_time('12:00')
20、df.between_time df.between_time('0:45','0:15')
21、df.bfill
22、df.bool
23、df.boxplot 
24、df.clip 控制元素在阈值范围内df.clip(min,max)
25、df.clip_lower 控制元素的最小值并修改最小值
26、df.clip_upper 控制元素的最大值并修改最大值
27、df.combine(self,other,func,fill_value=None, overwrite=True) other为series或dataframe func为函数,将两个dataframe或series结合并且根据函数作出变化并返回
28、df.combine_first()
29、df.compound 
30、df.copy(self,deep=True) 深浅拷贝取决于deep是否为True
31、df.corr(self,method="pearson",min_periods=1) 返回相关系数矩阵(dataframe格式的)
32、df.corrwith(self,other,axis=0,drop=False,method='pearson') 返回相关系数矩阵,series的
33、df.count(self,axis=0,level=None,numeric_only=Flase) 计算除了Nan以外的元素的总和
34、df.cov
35、df.cummax(self,axis=None,)遍历dataframe的每一行并取最大值
36、df.cummin(self,axis) 遍历dataframe的每一行/列并取最小值
37、df.cumprod() 遍历datafrmae的每一行/列并将前面的数乘起来
38、df.cumsum() 按行或者按列求和
39、df.describe() if numeric series则统计count mean std min 25% 50% 75% max
				  if categorical series则统计count unique top freq 
				  if timestamp series 则统计 count unique top freq first last
				  if dataframe 只统计numeric fields
				  if df.describe(include='all')  then describing all columns of a dataframe regardless of data type
    df.numeric.describe() 
    只统计numeric columns df.describe(include=[np.number])
    只统计string columns df.describe(include=[np.object])
    只统计categorical columns df.dexcribe(include=['category'])
    统计除了numeric columns以外 df.describe(exclude=[np.number])
40、df.diff  按行或列求差,periods=
41、df.div(10) 每个element都除以10  
 	df.rdiv(10) 10除以每个element
 	df.sub([1,2],axis='columns')
 	df.mul()
 	df.add()
 	df.truediv()
 	df.floordiv()
 	df.mod()
 	df.pow()
42、df.dot() 求两个dataframe的相乘
43、df.drop() 删除
44、df.drop_duplicates()去掉重复行
45、df.dropna() 删除含有缺失值的那一行
 	df.dropna(axis='columns') 删除含有缺失值的那一列 
 	df.dropna(how='all') 当某行的element全为缺失值时,改行删除
 	df.dropna(thresh=2) 当该行出现2个以上的缺失值时删除该行
 	df.dropna(subset=['','']) 指定非列表出现字段是否有缺失值,若有缺失值则删除该
46、df.duplicated() return boolean series 
47、df.eq(100) 判断dataframe里的element是否等于括号里面的
48、df.equals() 判断测试两个对象是否包含相同的元素
49、df.eval()  两个列相加并返回数组
50、df.evm()
51、df.expanding()
52、df.explode() 一行数据展开成多行
53、df.fillna(0) 用括号里特定的方法填充空值,用0填充空值
54、df.filter(items=['one','three'])  
55、df.first() 获取df前几行的某个值
56、df.first_valid_index() if all elements are non-NA/null,returns None.also returns none for empty Series/DataFrame
57、df.floordiv ()
58、df.from_dict()dict格式数据组成dataframe格式
59、df.from_items() 将tuples格式数据组成dataframe格式
60、df.from_records() 将ndarray组成dataframe
61、df.ge() 大于等于 return dataframe of bool
	df.eq()	等于
	df.ne() 不等于
	df.le() 小于等于
	df.lt() 小于
	df.gt() 大于等于
62、df.get() 
63、df.get_dtype_counts() 统计数据类型
64、df.get_ftype_counts() 统计文件类型
65、df.get_value()  
66、df.get_values() 返回一个数组
67、df.groupby() 按规则分组并计算 
68、df.head() 默认获取dataframe的前5行,也可在括号里指定行数
69、df.hist() 画直方图
70、df.idxman() 
	df.idxmin()
71、df.infer_objects() 
72、df.info() 打印出dataframe的具体的概括
73、df.insert() 插入某列到dataframe合适的位置中
74、df.interpolate() 根据methods参数指定方法插值,默认为线性
75、df.isin() return dataframe of booleans showing whether each element in the dataframe is contained in values
76、df.isna() return dataframe,mask of bool values for each element in dataframe that indicates whether an element is not an NA value
    df.isnull() isna的别名
77、df.items() 分别遍历dataframe的每一列
78、df.iteritems() 

16、判断dataframe中是否包含某一个元素b

"b" in df.values # 返回一个布尔值 True或者False

17、行列索引及值的获取
1、获取某一列:df[‘列索引名’]
2、获取某一行: df.loc[‘行索引名’]
3、获取某一行某一列的某个值:print(df.loc[‘05-05-11’,‘R003’]) 或者 print(df.iloc[4,0])

18、新建一个datafame,并指定行索引和列索引

col=[] # 列索引
row=[] # 行索引
df=pd.DataFrame(columns=col,index=row)

19、修改某个单元格的值或者赋值
(1)用loc

df.loc[1,'name'] = 'aa' #修改index为‘1’,column为‘name’的那一个值为aa。
df.loc[1] = ['bb','ff',11] #修改index为‘1’的那一行的所有值。
df.loc[1,['name','age']] = ['bb',11]    #修改index为‘1’,column为‘name’的那一个值为bb,age列的值为11。

(2) 使用iloc[row_index,column_index]

df.iloc[行索引,列索引] = 19#修改某一元素
df.iloc[:,2] = [11,22,33] #修改一整列
df.iloc[0,:] = ['lily','F',15] #修改一整行	
``

20、取出指定位置的dataframe的值,返回的是一个series,然后再取series的值出来
	tp=df[df[行索引名]==""][列索引名]
取series的值出来,series有多个值的时候 series相当于一个字典,遍历字典 
	for i,v in ser.iteritems()
		print(i,v)

21、将list添加到dataframe中 
 一般是获取数据,将数据转为dataframe然后写入xlsx csv xls
	Python中将列表转换成为数据框有两种情况:
		第一种是两个不同列表转换成一个数据框
		

```python
from pandas.core.frame import DataFrame
a=[1,2,3,4]#列表a
b=[5,6,7,8]#列表b
c={"a" : a,   "b" : b}#将列表a,b转换成字典
data=DataFrame(c)#将字典转换成为数据框
print(data)
	   a  b
	0  1  5
	1  2  6
	2  3  7
	3  4  8

第二种是一个包含不同子列表的列表转换成为数据框

from pandas.core.frame import DataFrame
a=[[1,2,3,4],[5,6,7,8]]#包含两个不同的子列表[1,2,3,4]和[5,6,7,8]
data=DataFrame(a)#这时候是以行为标准写入的print(data)
	    0  1  2  3
	0   1  2  3  4
	1   5  6  7  8

data=data.T#转置之后得到想要的结果
data.rename(columns={0:'a',1:'b'},inplace=True)#注意这里0和1都不是字符串
print(data)
	   a  b
	0  1  5
	1  2  6
	2  3  7
	3  4  8

22、修改列索引名

df.columns = ['name','gender','age'] #尽管我们只想把’sex’改为’gender’,但是仍然要把所有的列全写上,否则报错。
df.rename(columns = {'name':'Name','age':'Age'},inplace = True) #只修改name和age。inplace若为True,直接修改df,否则,不修改df,只是返回一个修改后的数据。
df.index = list('abc')#把index改为a,b,c.直接修改了df。
df.rename({1:'a',2:'b',3:'c'},axis = 0,inplace = True)#无返回值,直接修改df的index
dataframe.index=newname # 修改行标题
dataframe.columns=newname # 修改列标题

23、查看缺失值

pd.isnull(df).values.any()

False
  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值