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元 |
---|