pandas数据处理学习总结

1.数据的创建和读取

pd.Series([1,2,3])#直接一个列表数据,不用索引,创建一个Series
pd.Series([1,2,3],index=['a','b','c'])#一个列表,索引是另一个列表,创建一个Series
pd.Series([1,2,3],index=['a','b','c'],name='Product A')#给Series添加一个name属性,可作为DataFrame的列名
pd.Series({'name':['小明','小红','小刚'],'age':[18,19,20]})#直接一个字典数据,字典的键是行索引

pd.DataFrame([1,2,3],index=['a','b','c'])#一个列表,索引是另一个列表,创建一个DataFrame
pd.DataFrame({'name':['小明','小红','小刚'],'age':[18,19,20]})#字典的键是列名,index是默认的0,1,2
a=pd.DataFrame({'name':['小明','小红','小刚'],'age':[18,19,20]},index=['a','b','c'])#自定义index

a=pd.DataFrame([['小明','小红','小刚'],[18,19,20]],index=['name','age'],columns=['aa','bb','cc'])
#数据是一个np数组,columns是列名

path=r'文件所在路径'
data=pd.read_csv(path,index_col=0)#使用第0列作为行索引,否则默认索引
pd.set_option('display.max_rows',6)#设置以后只显示最前面3行和最后面3行

2.数据的查看

data.head(n)#数据的前部,n 默认5行
data.tail()#数据的尾部,n 默认5行
type(data)#类型,为DataFrame
data.shape#形状 (m,n)m rows and n columns
data.columns#每一列的列名
data.dtypes#每一列都给出数据类型
data['price'].dtype#具体某一列的数据类型
data.index.dtype#每个dataframe的index也有类型
data['column_name']#查看某一列,该列的类型为Series。理解:列名相当于列上的索引
data['列索引']['行索引']#定位到具体的一个值
data[['column_name','column_name']]#查看多列,多列的类型为DataFrame

pokemon=pokemon[['name','type','hp','evolution','pokedex']]#更改列的顺序,直接调整列名的顺序就行
pokemon['place'] = ['park','street','lake','forest']#添加一个新列的操作

#使用iloc方法查看数据,使用数字索引,逗号前是行。
data.iloc[0]#查看第一行数据
data.iloc[-5:]#最后五行,最后一row的索引是-1
data.iloc[:, 0]#查看第一列数据
data.iloc[[0, 1, 2], 0]#0,1,2三行的第0列

#使用loc方法查看数据,除非索引是数字类型,不然需要使用行列的名称
data.loc[['row_name','row_name_1']]#查看行
data.loc[:,'column_name']#查看某列
data.loc[:,['column_name','column_name_1']]#查看多列
data.loc['row_name','column_name']#具体的值

注意:iloc中的[0:10]是0,…,9;在loc中[0:9]是0,…,10,当无名称时,既是数字索引

3.数据的清洗

#pandas内置的条件选择器---isin(),符合条件将返回True
wine_reviews['country'].isin(['Italy','France'])#判断country列的每一个值是否是'Italy'或者'France',是的话为True
wine_reviews.loc[wine_reviews['country'].isin(['Italy','France'])]#使用loc可以把True的筛选出来

#第二个内置的---isnull()和notnull() 是否属于空值
wine_reviews.loc[wine_reviews['points'].notnull()]#把不是空值的筛选出来

#pandas里的判断缺失值方法
pd.isnull(data)#直接按列的顺序查看是否有缺失值
wine_reviews.loc[pd.notnull(wine_reviews['points'])]


#使用df.fillna()可以用指定的值填充缺失值。
reviews['region_1']=reviews['region_1'].fillna('Unknonw')#用Unknonw覆盖region_1列中为NaN的值

#df.replace()可以用指定的后值替代前值
reviews['points']=reviews['points'].replace(87,101)#将points列中的87替换为101

#df.dropna()删除有缺失值的行
iris=iris.dropna(how='any',axis=0)#删除有缺失值的行,axis可以选择是删除行(0)或列(1)

del data['column_name']#删除某列

4.数据转换

#使用df.astype()可以将一列的数据类型转换为指定类型
data['points'].astype('Float64')#修改类型

#将Year的数据类型转换为 datetime64
crime['Year'] = pd.to_datetime(crime['Year'], format='%Y')#%Y表示crime['Year']里的值表示4位数的年份,不然默认为微秒

data['new']=data['points'].map(lambda p: p-review_points_mean)#dataframe的map用法,某一列依次进行()里的函数操作,不改变原来的,需要重新添加一列来储存。
data['gender'] = data['gender'].map({"男": 1,"女": 0})#后面接一个字典,用值替换键
#总结map(),括号里可以输入函数,也可以输入字典

5.数据整合

concat方法
pd.concat()可以按照指定的轴将多个DataFrame合并为一个

all_data=pd.concat([data1,data2])#将data1和data2合并,如果列名相同合并成一列
all_data_col=pd.concat([data1,data2],axis=1)##将data1和data2合并,如果行名相同合并成一行
pd.concat([data1,data2],axis=0,ignore_index=True)#axis=0合并列,ignore_index是否重新生成列索引                

merge方法
pd.merge()可以根据指定的键将两个DataFrame连接

pd.merge(data1,data2,how='inner',on=['subject_id'])#how默认为inner,通过subject_id键连接,该列的值如果相同则连接在一起,交集形式
pd.merge(data1,data2,how='outer'on=['subject_id']),#并集形式,所有'subject_id'的值都列出来
data['country']+ " # " + data['region_1']#用某个符号#连接在一起

6.数据分析

分组分析方法
理解:分组就是将某一列中值相同的归为一类,可以求该类的其他列的值的情况

data.groupby(['columns_name1'],as_index=False)#默认会将分组的列作为索引
data.groupby(['columns_name1'])['columns_name2'].sum()#按第一种列进行分组后可以对第二种列进行求和操作
data.groupby(['columns_name1'])['columns_name2'].agg([len, min, max])#agg()同时在DataFrame上运行一堆不同的函数。
len(data)#len或者放在agg([])里面使用

data['column_name'].describe()#某一列数据的描述
drinks.groupby('continent')['wine_servings'].describe()#每个大陆(continent)的红酒消耗(wine_servings)的统计摘要

#重新设置索引
iris = iris.reset_index(drop = False)#drop=True就是把原来的索引index列去掉,重置index。,#drop=False就是保留原来的索引,添加重置的index。
data.reset_index()#将多索引转化成常规索引

常用方法

data.info()#查看表格的信息
data['column'].count()#计数
data['column'].sum()#求和
data['column'].min()#min
data['column'].max()#max
data['points'].mean()#查看分数的平均分
data['points'].median()#查看分数的中位数
data['column_name'].value_counts()#某一列的每种不同值出现次数
data['column_name'].unique()#查询某一列的不同的值
data['column_name'].nunique()#查询某一列总共有多少不同的值

data.idxmax(0)#查询每一列最大的值,并给出对应的行,参数为1是对行进行操作
data.set_index('column_name',drop=True)#用某列作为索引果。将drop参数设置为True,则原始数据中的列将被从DataFrame中删除;如果设置为False,则列将保留在 DataFrame 中。

data.set_index('points')#将某一column作为索引,覆盖掉原来的索引

data.index.is_unique#查看是否有重复
data.sort_index()#根据索引排序

data.sort_values(by='column_name',ascending=True)#根据某列的值升序排列
data.sort_values(by=['country','len'])#根据多列的值升序排列

data['critic']='everyone'#赋值操作,整列都变成everyone
data["country"]=='Italy'#进行判断
data.loc[data["country"]=='Italy']#有条件的选择所需row
data.loc[(data['country']=='Italy') & (data['points'] >= 90)]#两个条件都要满足,|是或者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值