Pandas学习
Pandas学习
DataFrame和Series
DataFrame
df = pd.read_csv()
返回一个DataFrame对象,对象是二维表。
Series是一维的数据结构

可以手动指定names=name_list,表示columns叫啥
这个对象有很多属性
.index:RangeIndex,读入时,会默认指定行号,从0开始
.columns:列的名称
.shape:这个表长啥样,几行几列
.dtypes:每一列的数据类型
df.head():查看前数列
Series
创建一个Series:
series = pd.Series([1,'1',2], index = [1, 'b', 3])
series.index和dataframe的index一样,也是总共几个,步长多少
从DataFrame查询Series
DataFrame可以看作是有Series组成的字典,可以通过表示行的index访问,也可以通过表示列的columns访问。
如果查出来的是二维的,那么就是DataFrame,如果是一维的,就是Series。
查询一行:df.loc[index]
查询多行:df.loc[index_1:index_2]
查询一列:df[column_label]
从DataFrame查询数据
- df.loc:根据index和查询,甚至可以写入,常用
- df.iloc:
- df.where
- df.query
主要是loc[]的使用
参考:https://blog.csdn.net/weixin_45144170/article/details/106033436
loc[index/index_list/index_slice, label/label_list/label_slice]
条件表达式的查询
df.loc[expr, col_slice]
df['label'] > 0返回一个bool类型的Series,index和原dataframe一样,
可以把这个Series放到loc[]里,挑选出符合条件的行们。
从DataFrame中统计数据
全局统计
统计每个数字列,给出平均值、反差等信息。
df.describe()
统计结果还是一个dataframe。
枚举范围
查看某个列的取值范围,比如风向,爱好等
df['column`].unique`
某一列中某个值出现次数
利用Series的value_counts()方法
df['column_name'].value_count
相关系数
df.cov() # 整个表的协方差矩阵
df.corr() # 整个表的相关系数矩阵
要查看某两列的协方差或相关系数
df['column_1'].cov(df['column_2'])
df['column_1'].corr(df['column_2'])
我们在“挖掘数据”的时候,可以新建一些列,查看这些列和原有列的相关程度corr。
修改DataFrame中的数据
修改包括增删改
增
直接新建一个column
toys['col_a'] = toys['name'] + '_a'
temp['wencha'] = temp['high_temp'] - temp['low_temp']
根据条件新建column
可以这么理解:
一个函数,函数的参数是一个Series,返回值是str或者int。
这样,逐行遍历DataFrame中的Series,通过函数映射到一个值,写到新的column就行。
dataframe和Series都有apply方法,会把可迭代的单元代入进行判断,
比如DataFrame的迭代单元是Series,而Series的迭代单元就是单值。
def gtl_0(x) :
if x['time'] > 0:
return True
else :
return False
toys['time_gtl_0'] = toys.apply(gtl_0, axis = 1)
axis=1表示传入的Series是通过列名访问
直接通过loc条件表达式修改
df['temp_type'] = '' //
df.loc[df['high_temp']-df['low_temp'] > 10, 'temp_type'] = '温差大'
删
直接删除某一列
drop(col, axis=1, inplace=true)
对空的处理
- 检测空值:isnull和notnull
- 丢弃空值:
- axis:按行还是按列丢弃
- how:是存在空值则丢弃还是所有为空才丢弃
- inplace:是直接在原df上修改还是返回一个新的df
- 填空空值:fillna
- value:填充的值,可以是单值,也可以是字典,key是列名,value是值
- method:用前一非空值填充还是用后一个非空值填充
- axis:按行还是按列填充
- inplace:同上
检测空值
df.isnull()一个bool的dataframe
series.isnull()一个bool的series
df.isnull().sum()直接按列统计NAN个数,因为真值也是可以求和的。
notnull()的bool取反
因为其返回了一个bool类型的Series或DataFrame,所以可以用做loc中条件表达式的筛选。
筛选出toys中,name这一列中
toys.loc[toys['name'].isnull()]
删除空值
若某列中全是空值,则删除该列
toys.dropna(axis = 1, how = 'all', inplace = True)
若某行中含空值,则删除该行
toys.dropna(axis = 0, how = 'any', inplace = True)
填充空值
对于一个空值,若其在“分数”列中,则填充为0。
score.fillna({"分数":0})
对toys中price这一列,若存在空值,则用上一行的非空值来填充
toys['price'].fillna(method='ffill', inplace=True)
杂接口
df.set_index()
df默认index时是0开始,我们可以把index设置为某个column的值,然后再把这个列删掉。
参考: https://blog.csdn.net/lisnyuan/article/details/107086094

浙公网安备 33010602011771号