pandas-dataframe-operation

本文介绍了Pandas DataFrame的常用操作,包括查询、新增和修改数据列、缺失值处理及排序。查询部分讲解了直接选取、.loc和.iloc方法。新增和修改数据列涉及直接赋值、分条件赋值和apply方法。对于缺失值处理,讨论了检测、删除和填充。最后,阐述了DataFrame的排序功能。
摘要由CSDN通过智能技术生成

pandas-dataframe常用操作

上一篇分享了pandas的数据读取,这一节继续分享在读取数据获得dataframe后的常用操作

import pandas as pd 

一、dataframe查询

1、查看dataframe的前几行,后几行,行列信息,以及对数值型字段数据进行描述统计

df=pd.read_excel(r'C:/Users/37957/Desktop/pandas_files/pandas_dataframe/hotel.xlsx',index_col='序号')
df.head() #括号中不输参数时,默认查询前5行数据
名称关键字区域地址评价点评人数平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.0422元
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)浪漫情侣东区铜锣湾永兴街8号4.512708.0693元
3香港碧荟酒店(The BEACON)商务出行油尖旺九龙旺角洗衣街88号4.7328.0747元
4香港湾仔帝盛酒店(Dorsett Wanchai)浪漫情侣湾仔皇后大道东387-397号4.45014.0693元
5如心艾朗酒店(L‘hotel elan)浪漫情侣观塘观塘创业街38号4.63427.0581元
df.tail() #括号中不输参数时,默认查询后5行数据
名称关键字区域地址评价点评人数平均消费
序号
416香港天天宾馆(TIN TIN GUEST HOUSE)地铁周边油尖旺旺角弥敦道607号新兴大厦1517A3.216.0227元
417香港AMR宾馆(AMR Hostel)地铁周边NaN尖沙咀弥敦道58号美丽都大厦6字楼A12室NaNNaN977元
418香港如心海景酒店暨会议中心(L‘hotel Nina et Convention Centre)海滨风光荃湾荃湾 杨屋道8号4.545462.0709元
419香港如心海景酒店暨会议中心(L‘hotel Nina et Convention Centre)海滨风光荃湾荃湾 杨屋道8号4.545463.0709元
420香港花盈酒店(家庭旅馆)(Bloomy Hotel)地铁周边油尖旺尖沙咀弥敦道87号华源大厦9字楼C2室4.0273.0256元
df.index
Int64Index([  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,
            ...
            411, 412, 413, 414, 415, 416, 417, 418, 419, 420],
           dtype='int64', name='序号', length=420)
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 420 entries, 1 to 420
Data columns (total 7 columns):
名称      420 non-null object
关键字     389 non-null object
区域      350 non-null object
地址      420 non-null object
评价      371 non-null float64
点评人数    404 non-null float64
平均消费    413 non-null object
dtypes: float64(2), object(5)
memory usage: 26.2+ KB
df.describe() #对dataframe中数值型字段进行描述统计
评价点评人数
count371.000000404.000000
mean4.2838272483.262376
std0.5082644539.495778
min1.5000001.000000
25%4.20000087.000000
50%4.400000853.500000
75%4.6000003247.000000
max4.90000045463.000000

2、查看dataframe中数据的方法

几种查询方法:
1、通过直接选取的方法
2、df.loc方法,根据行,列的标签值查询
3、df.iloc方法,根据行,列的数字位置查询
4、df.where方法
5、df.query方法
这里我只分享一下最为常见前两种方法

df=df[0:5]  # 为了方便显示,只取文件的前5行
df
名称关键字区域地址评价点评人数平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.0422元
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)浪漫情侣东区铜锣湾永兴街8号4.512708.0693元
3香港碧荟酒店(The BEACON)商务出行油尖旺九龙旺角洗衣街88号4.7328.0747元
4香港湾仔帝盛酒店(Dorsett Wanchai)浪漫情侣湾仔皇后大道东387-397号4.45014.0693元
5如心艾朗酒店(L‘hotel elan)浪漫情侣观塘观塘创业街38号4.63427.0581元
1)直接选取的方法询

使用一个列标签或列标签列表进行查询,获取一列或多列;使用切片则获行。注意:使用索引位置序号切片结果不包含末端索引,使用索引标签切片结果包含末端索引

print(type(df['名称']))
print('-'*30)
df['名称'] # 使用一个值进行查询,获得的是一个series
<class 'pandas.core.series.Series'>
------------------------------





序号
1               香港嘉湖海逸酒店(Harbour Plaza Resort City)
2    香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)
3                                香港碧荟酒店(The BEACON)
4                         香港湾仔帝盛酒店(Dorsett Wanchai)
5                              如心艾朗酒店(L‘hotel elan)
Name: 名称, dtype: object
print(type(df[['名称','平均消费']]))
print('-'*30)
df[['名称','平均消费']]   # 使用一个值进行查询,获得的是一个DataFrame
<class 'pandas.core.frame.DataFrame'>
------------------------------
名称平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)422元
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)693元
3香港碧荟酒店(The BEACON)747元
4香港湾仔帝盛酒店(Dorsett Wanchai)693元
5如心艾朗酒店(L‘hotel elan)581元
df[0:2]  #使用索引位置序号切片结果不包含末端索引
名称关键字区域地址评价点评人数平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.0422元
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)浪漫情侣东区铜锣湾永兴街8号4.512708.0693元
2)、df.loc方法,根据行,列的标签值查询

1、若行列都传入某一个标签,得到的是指定位置的数据,类型即为该数据的数据类型。注意:loc使用标签切片包含末端项,iloc使用索引位置切片不包含末端项。
2、若参数里传入单独指定某一行,得到的是name为该行标签Series,但如果以列表形式指定某一行如[1],得到的是DataFrame;
3、若行和列传入的都是列表形式,得到的是DataFrame,当传入多行单列时返回的还是一个series
4、使用区间进行查询,区间即包含开始也包含结束
5、使用条件表达式查询

# 1、传入某一个标签
df.loc[1,'名称']
'香港嘉湖海逸酒店(Harbour Plaza Resort City)'
# 2.1、传入单独行
df.loc[1]     
名称      香港嘉湖海逸酒店(Harbour Plaza Resort City)
关键字                                    休闲度假
区域                                       元朗
地址                               天水围 天恩路18号
评价                                      4.6
点评人数                                  17604
平均消费                                   422元
Name: 1, dtype: object
# 2.2、以列表形式传入单独行
df.loc[[1]]
名称关键字区域地址评价点评人数平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.0422元
# 3、行和列传入的都是列表形式,返回dataframe,当传入多行单列时返回的是一个series
df.loc[[1,2,3],['名称','平均消费']]
名称平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)422元
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)693元
3香港碧荟酒店(The BEACON)747元
# 4、使用区间进行查询,区间即包含开始也包含结束
df.loc[1:3,'名称':'平均消费']
名称关键字区域地址评价点评人数平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.0422元
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)浪漫情侣东区铜锣湾永兴街8号4.512708.0693元
3香港碧荟酒店(The BEACON)商务出行油尖旺九龙旺角洗衣街88号4.7328.0747元
# 5、使用条件表达式查询
df.loc[df['评价']>=4.6,:]
名称关键字区域地址评价点评人数平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.0422元
3香港碧荟酒店(The BEACON)商务出行油尖旺九龙旺角洗衣街88号4.7328.0747元
5如心艾朗酒店(L‘hotel elan)浪漫情侣观塘观塘创业街38号4.63427.0581元
# 多条件查询
df.loc[(df['关键字']=='休闲度假')& (df['评价']>=4.6),:]
名称关键字区域地址评价点评人数平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.0422元

二、dataframe新增&修改数据列

1、直接赋值
2、分条件赋值
3、apply方法

# 将原dataframe中平均消费字段的‘元’去掉
df #查看原dataframe
名称关键字区域地址评价点评人数平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.0422元
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)浪漫情侣东区铜锣湾永兴街8号4.512708.0693元
3香港碧荟酒店(The BEACON)商务出行油尖旺九龙旺角洗衣街88号4.7328.0747元
4香港湾仔帝盛酒店(Dorsett Wanchai)浪漫情侣湾仔皇后大道东387-397号4.45014.0693元
5如心艾朗酒店(L‘hotel elan)浪漫情侣观塘观塘创业街38号4.63427.0581元
df['平均消费']=df['平均消费'].str.replace('元','').astype('int') # 去掉‘元’
df #再次查看dataframe
名称关键字区域地址评价点评人数平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.0422
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)浪漫情侣东区铜锣湾永兴街8号4.512708.0693
3香港碧荟酒店(The BEACON)商务出行油尖旺九龙旺角洗衣街88号4.7328.0747
4香港湾仔帝盛酒店(Dorsett Wanchai)浪漫情侣湾仔皇后大道东387-397号4.45014.0693
5如心艾朗酒店(L‘hotel elan)浪漫情侣观塘观塘创业街38号4.63427.0581
# 直接赋值方法
df['总消费']=df['点评人数']*df['平均消费']
df
名称关键字区域地址评价点评人数平均消费总消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.04227428888.0
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)浪漫情侣东区铜锣湾永兴街8号4.512708.06938806644.0
3香港碧荟酒店(The BEACON)商务出行油尖旺九龙旺角洗衣街88号4.7328.0747245016.0
4香港湾仔帝盛酒店(Dorsett Wanchai)浪漫情侣湾仔皇后大道东387-397号4.45014.06933474702.0
5如心艾朗酒店(L‘hotel elan)浪漫情侣观塘观塘创业街38号4.63427.05811991087.0
# 按条件分组赋值
df['评价等级']=''
df.loc[df['评价']>=4.7,'评价等级']='评价高'
df.loc[(df['评价']<4.7)&(df['评价']>=4.6),'评价等级']='评价中'
df.loc[df['评价']<4.6,'评价等级']='评价低'
df
名称关键字区域地址评价点评人数平均消费总消费评价等级
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.04227428888.0评价中
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)浪漫情侣东区铜锣湾永兴街8号4.512708.06938806644.0评价低
3香港碧荟酒店(The BEACON)商务出行油尖旺九龙旺角洗衣街88号4.7328.0747245016.0评价高
4香港湾仔帝盛酒店(Dorsett Wanchai)浪漫情侣湾仔皇后大道东387-397号4.45014.06933474702.0评价低
5如心艾朗酒店(L‘hotel elan)浪漫情侣观塘观塘创业街38号4.63427.05811991087.0评价中
# apply方法
def get_level(x):
    if x['平均消费']>700:
        return '高等消费'
    if x['平均消费']>600:
        return '中等消费'
    else :
        return '普通消费'
df['消费等级']=df.apply(get_level,axis=1)
df
名称关键字区域地址评价点评人数平均消费总消费评价等级消费等级
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.04227428888.0评价中普通消费
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)浪漫情侣东区铜锣湾永兴街8号4.512708.06938806644.0评价低中等消费
3香港碧荟酒店(The BEACON)商务出行油尖旺九龙旺角洗衣街88号4.7328.0747245016.0评价高高等消费
4香港湾仔帝盛酒店(Dorsett Wanchai)浪漫情侣湾仔皇后大道东387-397号4.45014.06933474702.0评价低中等消费
5如心艾朗酒店(L‘hotel elan)浪漫情侣观塘观塘创业街38号4.63427.05811991087.0评价中普通消费

三、dataframe缺失值处理

1、缺失值的检测:isna与isnull
2、缺失值删除:dropna,默认值0
axis:删除行还是列,0或者index,删除行;1或者columns,删除列
how:如果等于any任意值为空就删除,如果等于all则所有值为空才删除
inplace:如果为true,则替换当前dataframe,为false时,返回新的dataframe
3、填充空值:fillna
value:用于填充的值,可以是单个值,也可以是dict/Series/DataFrame。
method:默认值None,等于ffill时,使用前一个不为空的值填充,等于bfill时,使用后一个不为空的值填充。
axis:按照行还是列,0或者index,行;1或者columns,列
inplace:如果为true,则替换当前dataframe,为false时,返回新的dataframe

df1=pd.read_excel(r'C:/Users/37957/Desktop/pandas_files/pandas_dataframe/hotel.xlsx',index_col='序号')  # 读取excel文件
df1.fillna({'评价':0}).head()   # 将评价字段的空值以0填充,查看前5行
名称关键字区域地址评价点评人数平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.0422元
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)浪漫情侣东区铜锣湾永兴街8号4.512708.0693元
3香港碧荟酒店(The BEACON)商务出行油尖旺九龙旺角洗衣街88号4.7328.0747元
4香港湾仔帝盛酒店(Dorsett Wanchai)浪漫情侣湾仔皇后大道东387-397号4.45014.0693元
5如心艾朗酒店(L‘hotel elan)浪漫情侣观塘观塘创业街38号4.63427.0581元
df1['评价'].fillna(method='ffill',inplace=True)  # 将评价字段的空值以前一个不为空的值填充
df1.head()  # 查看前5行
名称关键字区域地址评价点评人数平均消费
序号
1香港嘉湖海逸酒店(Harbour Plaza Resort City)休闲度假元朗天水围 天恩路18号4.617604.0422元
2香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay)浪漫情侣东区铜锣湾永兴街8号4.512708.0693元
3香港碧荟酒店(The BEACON)商务出行油尖旺九龙旺角洗衣街88号4.7328.0747元
4香港湾仔帝盛酒店(Dorsett Wanchai)浪漫情侣湾仔皇后大道东387-397号4.45014.0693元
5如心艾朗酒店(L‘hotel elan)浪漫情侣观塘观塘创业街38号4.63427.0581元

四、dataframe排序

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’, ignore_index=False, key=None)
常用参数:
by:字符串或者字符串列表,分别单列排序或者多列排序
ascending:升序或者降序,bool类型或者bool类型的列表,与by参数相对应

df2=pd.read_excel(r'C:/Users/37957/Desktop/pandas_files/pandas_dataframe/hotel.xlsx',index_col='序号')
df2.sort_values(by=['区域','评价'],ascending=[True,False]).head()  # 对区域列按正序,评价按从高到低排序,查看前5行
名称关键字区域地址评价点评人数平均消费
序号
131香港东隅(East Hong Kong)海滨风光东区太古城道29号4.74549.01408元
40香港颐庭酒店(铜锣湾店)(Eco Tree Hotel Causeway Bay)NaN东区铜锣湾水星街15号4.615.0567元
94香港海汇酒店(Hotel VIC on the Harbour)海滨风光东区北角邨里一号4.6298.0950元
121香港如心铜锣湾海景酒店(L‘hotel Causeway Bay Harbour View ...海滨风光东区铜锣湾 英皇道18号4.69712.0678元
189香港铜锣湾维景酒店(Metropark Hotel Causeway Bay Hong Kong)海滨风光东区铜锣湾 铜锣湾道148号4.63168.0950元
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值