酷帅吊炸天的 Pandas 常用操作命令汇总

非常庆幸自己在有意无意中学习了 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()

效果:
酷帅吊炸天的 Pandas 常用操作命令汇总

截取字符串的部分值

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]
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 3

df.dropna(axis=0,how='all') 这个命名很怪,为什么不叫dropNa

4年前 评论

@lovecn 的确, 各种命名形式混着来, 还比如 isin, astype.
这里解释说是遵循 python 的命名规范:
https://stackoverflow.com/questions/414990...

4年前 评论
UKNOW

df.content= df.content.replace({'

': np.NaN}, regex=True) 有content这个方法吗?

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!