pandas-dataframe-operation

Common operations of pandas-dataframe

The previous article shared pandas data reading. In this section, we continue to share common operations after reading data to obtain a dataframe

import pandas as pd 

One, dataframe query

1. View the first few rows, next few rows, row and column information of the dataframe, and perform descriptive statistics on numeric field data

df=pd.read_excel(r'C:/Users/37957/Desktop/pandas_files/pandas_dataframe/hotel.xlsx',index_col='序号')
df.head() #括号中不输参数时,默认查询前5行数据
name Keyword area address Evaluation Number of reviews Average consumption
Serial number
1 Harbour Plaza Resort City, Hong Kong Leisure vacation Yuen Long 18 Tin Yan Road, Tin Shui Wai 4.6 17604.0 422 yuan
2 Empire Hotel Hong Kong-Causeway Bay (Empire Hotel Hong Kong-Causeway Bay) Romantic couple East District 8 Wing Hing Street, Causeway Bay 4.5 12708.0 693 yuan
3 The BEACON Hong Kong Business travel Yau Tsim Mong 88 Sai Yee Street, Mong Kok, Kowloon 4.7 328.0 747 yuan
4 Dorsett Wanchai, Hong Kong Romantic couple Wanchai 387-397 Queen's Road East 4.4 5014.0 693 yuan
5 L'hotel elan Romantic couple Kwun Tong 38 Chong Yip Street, Kwun Tong 4.6 3427.0 581 yuan
df.tail() #括号中不输参数时,默认查询后5行数据
name Keyword area address Evaluation Number of reviews Average consumption
Serial number
416 Hong Kong Tiantian Hotel (TIN TIN GUEST HOUSE) Around the subway Yau Tsim Mong 1517A, Sun Hing Building, 607 Nathan Road, Mong Kok 3.2 16.0 227 yuan
417 AMR Hostel Hong Kong Around the subway NaN Room A12, 6th Floor, Mirador Mansion, 58 Nathan Road, Tsim Sha Tsui NaN NaN 977 yuan
418 Hong Kong L'hotel Nina et Convention Centre Seaside scenery Tsuen Wan 8 Yeung Uk Road, Tsuen Wan 4.5 45462.0 709 yuan
419 Hong Kong L'hotel Nina et Convention Centre Seaside scenery Tsuen Wan 8 Yeung Uk Road, Tsuen Wan 4.5 45463.0 709 yuan
420 Hong Kong Bloomy Hotel (Family Hotel) (Bloomy Hotel) Around the subway Yau Tsim Mong Room C2, 9th Floor, Hua Yuan Building, 87 Nathan Road, Tsim Sha Tsui 4.0 273.0 256 yuan
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中数值型字段进行描述统计
Evaluation Number of reviews
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元

Guess you like

Origin blog.csdn.net/weixin_47796965/article/details/108726175