#coding=utf-8
import pandas as pd
import numpy as np
#创建Series
obj = pd.Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
#创建DataFrame
frame1 = pd.DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'],
columns=['Ohio', 'Texas', 'California'])
frame2 = pd.DataFrame(np.random.randn(4, 3), columns=list('bde'),
index=['Utah', 'Ohio', 'Texas', 'Oregon'])
较完整的 DataFrame 构造器参数为:DataFrame(data=None,index=None,coloumns=None),columns 即 “name”
#修改DataFrame列名
total.columns = [u'全量']
#合并df。concat()
df.concat(total, active, withhold, axis=1) # 横向合并。增加的是列。
df.concat(total, active) # 纵向合并。增加的是行
#Series格式化
all[u'占比-主动'] = (all[u'主动'] / all[u'全量']).map('{:,.3f}'.format)
df['cost'] = df['cost'].map('${:,.2f}'.format) # 参考
#1.reindex() 重新索引
obj = pd.Series([4.5, 7.2, -5.3, 3.6], index=['d','b', 'a', 'c'])
#reindex()
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
#参数fill_value
obj3 = obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=0)
#2.method用法。ffill向前填充
obj3 = pd.Series(['blue', 'purple', 'yellow'], index=[0, 1, 4])
obj3.reindex(range(6), method='ffill')
obj3.reindex(range(6), method='bfill')
frame = pd.DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'],
columns=['Ohio', 'Texas', 'California'])
frame2 = frame.reindex(['a', 'b', 'c', 'd'])
#columns关键字 重新索引列
states = ['Texas', 'Utah', 'California']
frame.reindex(columns=states)
frame.reindex(index=['a', 'b', 'c', 'd'], method='ffill', columns=states)
当希望将函数应用到 DataFrame 对象的某一行或列时,可以使用 .apply(func, axis=0, args=(), **kwds) 方法。
比如 thresh=3,会在一行中至少有 3 个非 NA 值时将其保留。
inplace 参数
前面有个点一直没讲,结果整篇示例写下来发现还挺重要的。就是 Series 和 DataFrame 对象的方法中,凡是会对数组作出修改并返回一个新数组的,往往都有一个 replace=False 的可选参数。如果手动设定为 True,那么原数组就可以被替换。
求DataFrame的行数
len(df)
#列表中添加新元素.用append()
a = []
for i in range(1, 7):
a = a.append(i)
#元组中添加新元素.用+(.. ,)
a = ()
for i in range(1, 7):
a = a + (i, )