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元

pandas-dataframe-operation相关推荐

  1. python dataframe取一列_python - 从pandas DataFrame列标题中获取列表

    python - 从pandas DataFrame列标题中获取列表 我想从pandas DataFrame中获取列标题列表. DataFrame将来自用户输入,因此我不知道将会有多少列或将调用它们. ...

  2. pandas dataframe删除空行或者空列dropna,一般删除指定行或者列drop

    dropna参见https://blog.csdn.net/roamer314/article/details/84816171 df[~(df['col'].isnull())] #删掉空行 df. ...

  3. pandas使用tabulate函数将pandas dataframe以类似于plsql表格的方式打印出来(printing dataframe in tabular format)

    pandas使用tabulate函数将pandas dataframe以类似于plsql表格的方式打印出来(printing dataframe in tabular format) 目录

  4. python将scikit-learn自带数据集转换为pandas dataframe格式

    python将scikit-learn自带数据集转换为pandas dataframe格式 目录 python将scikit-learn自带数据集转换为pandas dataframe格式 #仿真数据

  5. pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe )

    pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe ) 目录

  6. pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe )

    pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe ) 目录

  7. pyspark dataframe数据连接(join)、转化为pandas dataframe、基于多个字段删除冗余数据

    pyspark dataframe数据连接(join).转化为pandas dataframe.基于多个字段删除冗余数据 目录 pyspark dataframe数据连接(join).转化为panda ...

  8. plotly可视化表格数据:以表格可视化pandas dataframe

    plotly可视化表格数据:以表格可视化pandas dataframe # plotly可视化dataframe中的表格数据: import plotly as py from plotly.too ...

  9. python将pandas dataframe内容写入ElasticSearch实战

    python将pandas dataframe内容写入ElasticSearch实战 目录 python将pandas dataframe内容写入ElasticSearch实战 索引设置 数据写入 数 ...

  10. python将ElasticSearch索引数据读入pandas dataframe实战

    python将ElasticSearch索引数据读入pandas dataframe实战 # 导入基础包和库 import pandas as pdpd.set_option('display.max ...

最新文章

  1. npm安装出错Unexpected end of input at 1:2307
  2. linux c++ 得到 指定进程名 线程数
  3. linux系统下创建symlink(@)即文件软链接(快捷方式)的命令
  4. csharp的几个特殊操作符
  5. 光纤测试时怎么选择对应项目的测试标准及测试仪?
  6. 华为海外版操作系统曝光?HUAWEI ARK OS现身
  7. springboot使用jsp完成数据的页面展示
  8. 解题报告 『[Poetize6]IncDec Sequence(差分)』
  9. DHCP协议执详解,DHCP协议执行流程、配置方式
  10. Linux文件内容查阅
  11. 内存中的 html 网页,网页制作使用html-webpack-plugin'入再内存中生成 html 页面插件...
  12. feign multipartfile 多文件上传_Spring Cloud Alibaba 实战(六) - 声明式HTTP客户端-Feign
  13. linux删除蓝色文件夹,linux删除文件报错
  14. ubuntu+火狐浏览器+印象笔记+剪藏+国内版配置
  15. Net-MVC+EasyUI之 TinyMCE使用
  16. android 传感器应用
  17. Java8新特性JDK8之joining函数
  18. FinClip小程序开放平台灰度发布上线,实现你对“千人千面”的所有创想
  19. less和sass的定义和区别
  20. Java线程池及配置参数详解

热门文章

  1. 黑科技小工具-uTools
  2. 让数据分析极速统一,阿里云和StarRocks一起干了件大事
  3. 赛效:怎么在图片上打马赛克
  4. 怎么制作自己的校园网路由器(广州大学版)
  5. 网页制作黄金内容填充
  6. 电子信息工程水声考研去向_各位大神。小弟今年考研考到中科院声学所,水声工程中心实验室。不知道这个实验室怎么样,有毕业的师兄师...
  7. php的db类库Eloquent单独使用系列(12)- 结果集模型转数组 - 2
  8. 一个与微软大数据产品经理交流的机会 | 独家
  9. 如何在线压缩png图片?png压缩图片大小的方法介绍
  10. spark Java oracle,spark2.x由浅入深深到底系列六之RDD java api用JdbcRDD读取关系型数据库...