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()
| 名称 | 关键字 | 区域 | 地址 | 评价 | 点评人数 | 平均消费 |
---|
序号 | | | | | | | |
---|
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()
| 名称 | 关键字 | 区域 | 地址 | 评价 | 点评人数 | 平均消费 |
---|
序号 | | | | | | | |
---|
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()
| 评价 | 点评人数 |
---|
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]
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['名称']
<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[['名称','平均消费']]
<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、使用条件表达式查询
df.loc[1,'名称']
'香港嘉湖海逸酒店(Harbour Plaza Resort City)'
df.loc[1]
名称 香港嘉湖海逸酒店(Harbour Plaza Resort City)
关键字 休闲度假
区域 元朗
地址 天水围 天恩路18号
评价 4.6
点评人数 17604
平均消费 422元
Name: 1, dtype: object
df.loc[[1]]
| 名称 | 关键字 | 区域 | 地址 | 评价 | 点评人数 | 平均消费 |
---|
序号 | | | | | | | |
---|
1 | 香港嘉湖海逸酒店(Harbour Plaza Resort City) | 休闲度假 | 元朗 | 天水围 天恩路18号 | 4.6 | 17604.0 | 422元 |
---|
df.loc[[1,2,3],['名称','平均消费']]
| 名称 | 平均消费 |
---|
序号 | | |
---|
1 | 香港嘉湖海逸酒店(Harbour Plaza Resort City) | 422元 |
---|
2 | 香港铜锣湾皇悦酒店(Empire Hotel Hong Kong-Causeway Bay) | 693元 |
---|
3 | 香港碧荟酒店(The BEACON) | 747元 |
---|
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元 |
---|
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方法
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元 |
---|
df['平均消费']=df['平均消费'].str.replace('元','').astype('int')
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 |
---|
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 | 评价中 |
---|
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='序号')
df1.fillna({'评价':0}).head()
| 名称 | 关键字 | 区域 | 地址 | 评价 | 点评人数 | 平均消费 |
---|
序号 | | | | | | | |
---|
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()
| 名称 | 关键字 | 区域 | 地址 | 评价 | 点评人数 | 平均消费 |
---|
序号 | | | | | | | |
---|
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()
| 名称 | 关键字 | 区域 | 地址 | 评价 | 点评人数 | 平均消费 |
---|
序号 | | | | | | | |
---|
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元 |
---|