非常慶幸自己在有意無意中學習了 Pandas 基礎,開始學的時候是覺得它很有意思,功能很強大。然鵝,除了做練習,並沒有實際應用。最近工作需要寫爬蟲,資料處理我就用了 Pandas, 這時才深深體會到其酷帥吊炸天的威力,一句話,只有我用不到的功能,沒有它不支援的功能,函式多到爆,每個函式又有辣麼多的引數可以用,感動到哭暈在廁所。。。。。。
所以除了之前整理的一些用法,我把這次工作中學到的新函式和用法整理如下:
檢視 dataframe 資訊,可以檢視每一列的具體資訊:
df.info()
刪除 NaN 所在的行:
刪除表中全部為 NaN 的行
df.dropna(axis=0,how='all')
刪除表中含有任何 NaN 的行
df.dropna(axis=0,how='any') #drop all rows that have any NaN values
刪除NaN所在的列:
刪除表中全部為 NaN 的列
df.dropna(axis=1,how='all')
刪除表中含有任何 NaN 的列
df.dropna(axis=1,how='any') #drop all rows that have any NaN values
去掉值不合適的行
首先把值改為 NaN, 注意,這裡需要先引入 numpy
df.content= df.content.replace({'<p></p>': np.NaN}, regex=True)
然後再把值有 NaN 的行刪掉
df = df.dropna(axis=0,how='any')
刪除所有含有某個字元的行
df=df[ ~ df['price'].str.contains('-')]
更改某一列字串的部分值
df.piclist= df.piclist.replace({'/uploads': 'http://www.zgmlxc.com.cn/uploads'}, regex=True)
df.head()
效果:
擷取字串的部分值
df["litpic"]= df["piclist"].str.split(",", n=0, expand = True)[0]
通過 str.split 函式將字串按逗號分隔,然後取其中第0列的值
修改某一列的資料型別
df[['price']] = df[['price']].astype(float)
模糊更改某一列中還有某個字元的值
df['kind'].loc[df['kind'].str.contains('蛋', na=False)] = 46
如上,是更改 kind
列中,把含有 "蛋” 的字元都改為 46,其中, na=False
參數列示忽略 NaN
明確批量更改某一列的值
df.category= df.category.replace({'禽畜肉蛋': 36, '水果':35, '糧油米麵': 6, '種子種苗':69, '苗木花草': 69, '農資農機': 54, '水產': 52, '蔬菜': 35}, regex=True)
合併列
## 先把列中的整數轉為字串
df['category'] = df['category'].map(lambda x:str(x))
df['kind'] = df['kind'].map(lambda x:str(x))
## 合併
df['attrid'] = df['category'].str.cat(df['kind'], sep=',')
資料篩選
必須同時滿足條件
outfile = df1[(df1[u'設計井別']=='11') & (df1[u'投產井別']=='11') &(df1[u'目前井別']=='11')]
滿足其一即可的篩選
outfile = df1[(df1[u'設計井別']=='11') | (df1[u'投產井別']=='11') | (df1[u'目前井別']=='11')]
刪除 appID 為 278 和 382,以及 appPlatform 為 2 的行
df[(True-df['appID'].isin([278,382]))&(True-df['appPlatform'].isin([2]))]
刪除 ‘成交金額’ 大於 1000 的行
df[df['成交金額'] > 10000]