点击上方“风控圈子”
选择“星标”公众号
每天早上8:30,一起实现自我增值
01pandas及其重要性
obj = Series([4,7,-5,3])
obj.index
obj.values
obj['one'] = 1
obj[obj > 0]
obj * 2
np.exp(obj)
'a' in obj
data = {'one':1,'two':2,'three':3}
obj = Series(data)
obj.name = ' population'obj.index.name = 'state'obj.index = ['one','two','three','four'] #通过赋值的方式修改索引
DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
DataFrame既有行索引也有列索引,可以被看做是Series组成的字典(共同用一个索引)。DataFrame面向行和列的操作基本上是平衡的。
DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。也可以轻松地将其表示为更高维度的数据(层次化索引的表格型结构,高级数据处理功能的关键要素)。
构建DataFrame的方法①:直接传入一个由等长列或Numpy数组组成的字典。
data = ({
'':[], '':[] '':[]}) frame = DataFrame(data)
结果DataFrame会自动加上索引,且全部列会被有序排列。
如果指定了列序列,则DataFrame的列会按照指定顺序进行排列。
DataFrame(data,columns = ['one','two','three'])
frame = DataFrame(data,columns = [],index = [])
frame.columns
如果传入的数据找不到,就会产生NA值
通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series
frame['one']
frame.one
返回的Series拥有原DataFrame相同的索引,且其name属性也已经被相应的设置好。
行也可以通过位置或名称的方式就行获取,比如用索引字段ix。
frame.ix['1']
列可以通过赋值的方式进行修改。
为不存在的列赋值会创建一个新列。
frame['new'] = 1 #新增一个空列,并赋一个标量值
frame['new'] = np.arange(5.) #新增一个空列,并赋一个标量值
将列表或数组赋值给某个列时,其长度必须跟DataFrame 长度相匹配。如果是Series,会精确匹配DataFrame的索引,空位被缺失值填补。
Series = Series([1,2,3],index = ['one','two','three'])
frame['new'] = Series
构建DataFrame的方法②:嵌套字典(字典的字典)
如果将嵌套字典传递给DataFrame,它会被解释为:外层字典的键作为列,内层键则作为行索引。
内层字典的键会被合并、排序以形成最终 的索引。除非显式指定了索引。
可以输入给DataFrame构造函数所能接受的各种数据
二维ndarray #数据矩阵,还可以传入行标和列标。
由数组、列表或元组组成的字典 #每个序列会变成DataFrame的一列,所有序列的长度必须相同。
Numpy的结构化/记录数组 #类似于“由数组组成的字典”
由Series组成的字典
由字典组成的字典
字典组成的Series列表
列表或元组组成的另一个DataFrame
Numpy的MaskedAarry
如果设置了DataFrame的index和columns属性,这些信息会被现显示出来。
跟Series一样,values属性也会以二维ndarray的形式返回DataFrame中的数据。
如果DataFrame各列的数据类型不同,则值数组的数据类型会选用能够兼容所有列的数据类型
索引对象
obj = Seires([],index = [])
obj = obj.reindex(['','',''])
obj = obj.reindex([],fillna = 0)
frame = frame.reindex(['','','',''])
frame.reindex(columns = '')
frame.reindex(index = ['','','','',],method = 'ffill',columns = '')
frame.ix[['','','',''],''
obj = Series(np.arange(5.),index = ['a','b','c','d','e','f'])
new_obj = obj.drop('c')
data.drop('one',axis = 0)
data.drop(['one','two'],axis = 1)
obj = Series(np.arange(5.),index = ['a','b','c','d','e','f'])
obj['b':'c']
obj['b':'c'] = 5
data['one']
data[['one','two']]
data[:2] #行切片索引选取
data[data['three'] > 5] #布尔型数组选取行
data < 5
data[data < 5] = 0
data.ix['',['','']] #先行后列
data.ix[['',''],[1,0,3]] #先行后列
data.ix[[data.three > 5],[:2]]
df1 + df2
df1.add(df2,fill_value = 0)
df1.reindex(columns = df2.columns,fill_value = 0)
f = lambda x : x.max() - x.min()
frame.apply(f)
frame.apply(f,axis = 1)
format = lambda x : '%.2f' %xframe.applymap(format)
Series有一个应用于元素级函数的map方法
frame['e'].map(format)
frame.sort_index()frame.sort_idnex(axis = 1) #根据任意轴上的索引就行排序frame.sort_index(axis = 1,ascending = False) #数据默认是按升序排序的,也可设置降序排序。
frame.sort_index(by = 'a')frame.sort_index(by = ['a','b'])
2)排名
对于重复值得索引,数据选择返回的结果不同。如果索引对应单个值,返回标量值;如果索引对应多个值,返回一个Series。
由于文章篇幅限制,今天先分享这些,如果您感兴趣后半部分可以期待下次的分享:
四-汇总和计算描述统计
五-处理缺失数据
六-层次化索引
七-其他有关pandas的话题
全文完,感谢您的耐心阅读
请顺手点个“在看”吧~
▼ 往期精彩回顾 ▼