pandas的DataFrame的列操作,多列选择,按数据类型,按列名称特征filter
一、按各列数据的类型选择列
已知movies为从csv文件读入的dataframe名称
movies.select_dtypes(include='int')
#所有列数据为int类型的列被选中
movies.select_dtypes(include='number')
movies.select_dtypes(include=['int', 'object'])
#所有列数据为int类型和object字符串的列被选中
movies.select_dtypes(exclude='float')
#所有列数据类型不是float的列被选中
二、指定列名称选择
1、列名称以字符串'' ''方式给出,则列数据为series类型
2、列名称以列表方式['' '']给出,则列数据为dataframe类型
3、用.loc[:,name]切片方法选择
movies[['director_name']]
type(movies[['director_name']])
pandas.core.frame.DataFrame
#字符串用[]扩住的,即列表方式给出
movies['director_name']
type(movies['director_name'])
pandas.core.series.Series
#字符串用' ' 扩住的,
用切片方法。loc
movies.loc[:, ['director_name']]
movies.loc[:, 'director_name']
多个列名
cols = ['actor_1_name', 'actor_2_name',
'actor_3_name', 'director_name']
movie_actor_director = movies[cols]
与上面完全等效
movie_actor_director = movies[['actor_1_name', 'actor_2_name',
'actor_3_name', 'director_name']]
三、用方法filter 选择列名称中具有指定特征的列
方法filter有三个互斥的参数
like="fb",筛选选择列名中含有fb字符串的列
item=col col=['name1','name2']是包含多个列名的列表
正则表达式 regex=r''\d'' 表示筛选出列名中至少包含0~9任意数字的字符串
movies.filter(like='fb')
cols = ['actor_1_name', 'actor_2_name',
'actor_3_name', 'director_name']
movies.filter(items=cols)
movies.filter(regex=r'\d')
四、修改列名,按照要求批量修改
自定义函数中,将列名称中含有facebook_likes的字符串用fb缩写替代
将字符串_for_reviews删除
使用rename方法修改列名称,函数名可以在方法的参数中使用?
def shorten(col):
return (col.replace('facebook_likes', 'fb')
.replace('_for_reviews', '')
)
movies = movies.rename(columns=shorten)