pandas-dataframe-operation

   日期:2020-09-24     浏览:91    评论:0    
核心提示: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.he

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.6 17604.0 422元
2 香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay) 浪漫情侣 东区 铜锣湾永兴街8号 4.5 12708.0 693元
3 香港碧荟酒店(The BEACON) 商务出行 油尖旺 九龙旺角洗衣街88号 4.7 328.0 747元
4 香港湾仔帝盛酒店(Dorsett Wanchai) 浪漫情侣 湾仔 皇后大道东387-397号 4.4 5014.0 693元
5 如心艾朗酒店(L‘hotel elan) 浪漫情侣 观塘 观塘创业街38号 4.6 3427.0 581元
df.tail() #括号中不输参数时,默认查询后5行数据
名称 关键字 区域 地址 评价 点评人数 平均消费
序号
416 香港天天宾馆(TIN TIN GUEST HOUSE) 地铁周边 油尖旺 旺角弥敦道607号新兴大厦1517A 3.2 16.0 227元
417 香港AMR宾馆(AMR Hostel) 地铁周边 NaN 尖沙咀弥敦道58号美丽都大厦6字楼A12室 NaN NaN 977元
418 香港如心海景酒店暨会议中心(L‘hotel Nina et Convention Centre) 海滨风光 荃湾 荃湾 杨屋道8号 4.5 45462.0 709元
419 香港如心海景酒店暨会议中心(L‘hotel Nina et Convention Centre) 海滨风光 荃湾 荃湾 杨屋道8号 4.5 45463.0 709元
420 香港花盈酒店(家庭旅馆)(Bloomy Hotel) 地铁周边 油尖旺 尖沙咀弥敦道87号华源大厦9字楼C2室 4.0 273.0 256元
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中数值型字段进行描述统计
评价 点评人数
count 371.000000 404.000000
mean 4.283827 2483.262376
std 0.508264 4539.495778
min 1.500000 1.000000
25% 4.200000 87.000000
50% 4.400000 853.500000
75% 4.600000 3247.000000
max 4.900000 45463.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.6 17604.0 422元
2 香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay) 浪漫情侣 东区 铜锣湾永兴街8号 4.5 12708.0 693元
3 香港碧荟酒店(The BEACON) 商务出行 油尖旺 九龙旺角洗衣街88号 4.7 328.0 747元
4 香港湾仔帝盛酒店(Dorsett Wanchai) 浪漫情侣 湾仔 皇后大道东387-397号 4.4 5014.0 693元
5 如心艾朗酒店(L‘hotel elan) 浪漫情侣 观塘 观塘创业街38号 4.6 3427.0 581元

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.6 17604.0 422元
2 香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay) 浪漫情侣 东区 铜锣湾永兴街8号 4.5 12708.0 693元

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.6 17604.0 422元
# 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.6 17604.0 422元
2 香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay) 浪漫情侣 东区 铜锣湾永兴街8号 4.5 12708.0 693元
3 香港碧荟酒店(The BEACON) 商务出行 油尖旺 九龙旺角洗衣街88号 4.7 328.0 747元
# 5、使用条件表达式查询
df.loc[df['评价']>=4.6,:]
名称 关键字 区域 地址 评价 点评人数 平均消费
序号
1 香港嘉湖海逸酒店(Harbour Plaza Resort City) 休闲度假 元朗 天水围 天恩路18号 4.6 17604.0 422元
3 香港碧荟酒店(The BEACON) 商务出行 油尖旺 九龙旺角洗衣街88号 4.7 328.0 747元
5 如心艾朗酒店(L‘hotel elan) 浪漫情侣 观塘 观塘创业街38号 4.6 3427.0 581元
# 多条件查询
df.loc[(df['关键字']=='休闲度假')& (df['评价']>=4.6),:]
名称 关键字 区域 地址 评价 点评人数 平均消费
序号
1 香港嘉湖海逸酒店(Harbour Plaza Resort City) 休闲度假 元朗 天水围 天恩路18号 4.6 17604.0 422元

二、dataframe新增&修改数据列

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

# 将原dataframe中平均消费字段的‘元’去掉
df #查看原dataframe
名称 关键字 区域 地址 评价 点评人数 平均消费
序号
1 香港嘉湖海逸酒店(Harbour Plaza Resort City) 休闲度假 元朗 天水围 天恩路18号 4.6 17604.0 422元
2 香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay) 浪漫情侣 东区 铜锣湾永兴街8号 4.5 12708.0 693元
3 香港碧荟酒店(The BEACON) 商务出行 油尖旺 九龙旺角洗衣街88号 4.7 328.0 747元
4 香港湾仔帝盛酒店(Dorsett Wanchai) 浪漫情侣 湾仔 皇后大道东387-397号 4.4 5014.0 693元
5 如心艾朗酒店(L‘hotel elan) 浪漫情侣 观塘 观塘创业街38号 4.6 3427.0 581元
df['平均消费']=df['平均消费'].str.replace('元','').astype('int') # 去掉‘元’
df #再次查看dataframe
名称 关键字 区域 地址 评价 点评人数 平均消费
序号
1 香港嘉湖海逸酒店(Harbour Plaza Resort City) 休闲度假 元朗 天水围 天恩路18号 4.6 17604.0 422
2 香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay) 浪漫情侣 东区 铜锣湾永兴街8号 4.5 12708.0 693
3 香港碧荟酒店(The BEACON) 商务出行 油尖旺 九龙旺角洗衣街88号 4.7 328.0 747
4 香港湾仔帝盛酒店(Dorsett Wanchai) 浪漫情侣 湾仔 皇后大道东387-397号 4.4 5014.0 693
5 如心艾朗酒店(L‘hotel elan) 浪漫情侣 观塘 观塘创业街38号 4.6 3427.0 581
# 直接赋值方法
df['总消费']=df['点评人数']*df['平均消费']
df
名称 关键字 区域 地址 评价 点评人数 平均消费 总消费
序号
1 香港嘉湖海逸酒店(Harbour Plaza Resort City) 休闲度假 元朗 天水围 天恩路18号 4.6 17604.0 422 7428888.0
2 香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay) 浪漫情侣 东区 铜锣湾永兴街8号 4.5 12708.0 693 8806644.0
3 香港碧荟酒店(The BEACON) 商务出行 油尖旺 九龙旺角洗衣街88号 4.7 328.0 747 245016.0
4 香港湾仔帝盛酒店(Dorsett Wanchai) 浪漫情侣 湾仔 皇后大道东387-397号 4.4 5014.0 693 3474702.0
5 如心艾朗酒店(L‘hotel elan) 浪漫情侣 观塘 观塘创业街38号 4.6 3427.0 581 1991087.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.6 17604.0 422 7428888.0 评价中
2 香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay) 浪漫情侣 东区 铜锣湾永兴街8号 4.5 12708.0 693 8806644.0 评价低
3 香港碧荟酒店(The BEACON) 商务出行 油尖旺 九龙旺角洗衣街88号 4.7 328.0 747 245016.0 评价高
4 香港湾仔帝盛酒店(Dorsett Wanchai) 浪漫情侣 湾仔 皇后大道东387-397号 4.4 5014.0 693 3474702.0 评价低
5 如心艾朗酒店(L‘hotel elan) 浪漫情侣 观塘 观塘创业街38号 4.6 3427.0 581 1991087.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.6 17604.0 422 7428888.0 评价中 普通消费
2 香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay) 浪漫情侣 东区 铜锣湾永兴街8号 4.5 12708.0 693 8806644.0 评价低 中等消费
3 香港碧荟酒店(The BEACON) 商务出行 油尖旺 九龙旺角洗衣街88号 4.7 328.0 747 245016.0 评价高 高等消费
4 香港湾仔帝盛酒店(Dorsett Wanchai) 浪漫情侣 湾仔 皇后大道东387-397号 4.4 5014.0 693 3474702.0 评价低 中等消费
5 如心艾朗酒店(L‘hotel elan) 浪漫情侣 观塘 观塘创业街38号 4.6 3427.0 581 1991087.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.6 17604.0 422元
2 香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay) 浪漫情侣 东区 铜锣湾永兴街8号 4.5 12708.0 693元
3 香港碧荟酒店(The BEACON) 商务出行 油尖旺 九龙旺角洗衣街88号 4.7 328.0 747元
4 香港湾仔帝盛酒店(Dorsett Wanchai) 浪漫情侣 湾仔 皇后大道东387-397号 4.4 5014.0 693元
5 如心艾朗酒店(L‘hotel elan) 浪漫情侣 观塘 观塘创业街38号 4.6 3427.0 581元
df1['评价'].fillna(method='ffill',inplace=True)  # 将评价字段的空值以前一个不为空的值填充
df1.head()  # 查看前5行
名称 关键字 区域 地址 评价 点评人数 平均消费
序号
1 香港嘉湖海逸酒店(Harbour Plaza Resort City) 休闲度假 元朗 天水围 天恩路18号 4.6 17604.0 422元
2 香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay) 浪漫情侣 东区 铜锣湾永兴街8号 4.5 12708.0 693元
3 香港碧荟酒店(The BEACON) 商务出行 油尖旺 九龙旺角洗衣街88号 4.7 328.0 747元
4 香港湾仔帝盛酒店(Dorsett Wanchai) 浪漫情侣 湾仔 皇后大道东387-397号 4.4 5014.0 693元
5 如心艾朗酒店(L‘hotel elan) 浪漫情侣 观塘 观塘创业街38号 4.6 3427.0 581元

四、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.7 4549.0 1408元
40 香港颐庭酒店(铜锣湾店)(Eco Tree Hotel Causeway Bay) NaN 东区 铜锣湾水星街15号 4.6 15.0 567元
94 香港海汇酒店(Hotel VIC on the Harbour) 海滨风光 东区 北角邨里一号 4.6 298.0 950元
121 香港如心铜锣湾海景酒店(L‘hotel Causeway Bay Harbour View ... 海滨风光 东区 铜锣湾 英皇道18号 4.6 9712.0 678元
189 香港铜锣湾维景酒店(Metropark Hotel Causeway Bay Hong Kong) 海滨风光 东区 铜锣湾 铜锣湾道148号 4.6 3168.0 950元
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服