Series
series 是一种类似一维数组的对象,它由一组数据(不同数据类型)以及一组与之相关的标签(索引)组成
- 仅有数据列表即可产生最简单的series
import pandas as pd
s1 = pd.Series([1,'a',5.2,7])
#获取索引
s1.index
#获取数据
s1.values
- 创建一个具有标签索引的series
s2 = pd.Series([78,'kkk',67,90],index=['a','b','c','d'])
- 使用python字典创建series
# key作为index
s3 = pd.Series([{'name':'haha','age':78}])
- series的查询
# 查询方法和字典类似 获取单个数据返回是一个值
s2['a']
# 查询多个标签 返回仍是一个series对象
s2[['a','b']]
- series的属性方法
- value_counts() :各个数值的数量统计
- apply :将函数作用于每一个value
- str:针对series的每个string类型的value,做字符操作
DataFrame
- 如何创建一个DataFrame对象
df = DataFrame(data, index, columns, dtype, copy)
- data表示要传入的数据 ,包括 ndarray,series,map,lists,dict,constant和另一个DataFrame
- index和columns 行索引和列索引 格式['x1','x2']
- dtype:每列的类型
- copy:从input输入中拷贝数据。默认是false,不拷贝。
- dataframe对象基本属性
文章 - 读取csv文件构建dataframe对象
pd.read_csv() 函数各个参数含义
- path:表示文件系统位置,url,文件型对象的字符串
- sep 和 delimiter:用于对行中各字段进行拆分的字符序列和正则表达式
- header :用作列名的行号,默认是第一行,如果csv文件没有应该设置为None
- index_clo:用作行索引的列名或列编号
- names:用作列名的列表对象,结合header = None
- skiprows:需要忽略的行数(从文件开始出算起),或是需要跳过的行号列表(从0开始)
- na_values:一组用于替换NA的值
- comment:用于将注释信息从行尾拆分出去的字符(一个或多个)
- parse_dates:默认false
- keep_date_col:默认false
- converters:用列号/列名跟函数映射关系组成的字典,{‘col’:function}会对col列的所有值应用函数function
- dayfirst
- date_parser:用于解析日期的函数
- nrows:需要读取的函数,从文件开始出算起
- iterator:返回一个textparser,以便逐块读取文件
- chunksize:文件快的大小,用于迭代
- skip_footer:需要忽略的函数,从文件末尾处算起
- verbose
- encoding:编码格式
- squeeze:如果数据解析后仅剩一列,返回series
- thousands:千分位分隔符
- dataframe操作
4.1 查询--数值,列表,区间,条件,函数
使用 df.loc[index,columns] 函数进行查询,该函数有两个参数,第一个是行标签,第二个是列标签(可选参数),两个参数既可以是列表也可以单个字符,如果两个参数都为列表,那么返回的是一个dataframe,否则,则为series
- 使用单个label值查询数据
# 准确的得到一个数 df.loc[index,columns] # 区别于df.ix[index] 获取某行指定列的值 df.loc[index,[col_name,col_name2]]
- 使用值列表批量查询
# 区别于df['col_name'],获取某列的指定行数据 df.loc[[index1,index2,index3],col_name] # 返回一个dataframe,相当于截取一个小方块 df.loc[[index1,index2],[col1,col2]]
- 使用数值区间进行范围查询
# 行按区间 df.loc[index1:index2,col1] # 列按区间 df.loc[index1,col1:col2] # 行和列都按区间 df.loc[index1:index2,col1:col2]
- 使用条件表达式查询
# 使用简单查询 df.loc[df['wendu']<-10,:] # 组合条件查询 &表示与 每个条件用() df.loc[(df[col1]<30)&(df[col2]>15),:]
- 调用函数查询
# 直接写lambda表达式 df.loc[lambda df : (df.['bWenDu']<=30)&(df.[yWenDu]>=15),:] # 自己编写函数,查询9月份,空气质量好的数据 def query_my_datas(df): return df.index.str.startswith('2018-09')&df['tianqi'] == '晴' df.loc[query_my_datas,:]
4.2 新增数据列
- 直接赋值
# 去掉字符c df[:,'bwendu'] = df['bwendu'].str.replace('c','').astype('int32') # 新增一列数据数据 df[:,'wencha'] = df['gaowen'] - df['diwen']
- df.apply方法
dataframe.apply有两个参数,第一是自定义函数(函数参数是一个series对象,是dataframe的行或列),第二个axis,axis=0(默认等于0)表示函数按列作用,此时series的索引是dataframe的index,axis=1表示函数按行作用,此时series的索引是dataframe的列名。返回的是一个新的series对象
# 新建一个温度类型 def get_wendu_type(x): if x['bwendu'] > 33: return '高温' if ['ywendu'] < -10: return '低温' return '常温' df['wendu_type'] = df.apply(get_wendu_type,axis=1)
- df.assign方法
不同于apply,该方法可以同时新增多个列,其次在apply中需要指定axis,在assign中默认传入dataframe的行series(apply axis=1)。该方法不会修改函数本身,返回一个新的对象
df.assign( bwendu_huashi = lambda x : x['bwendu']*9/5+32, ywendu_huashi = lambda x : x['ywendu']*9/5+32, )
- 按条件选择分组分别赋值
# 广播机制 会新增一列 wencha_type = '' df.loc[df['bwendu']-df['ywendu']>10,'wencha_type'] = '温差大' df.loc[df['bwendu']-df['ywendu']<=10,'wencha_type'] = '温差正常'
网友评论