利用python进入数据分析之pandas的使用
来源:互联网 发布:筱姿服饰旗舰店淘宝店 编辑:程序博客网 时间:2024/06/14 19:38
In [2]:
from pandas import Series, DataFrameimport pandas as pdfrom __future__ import divisionfrom numpy.random import randnimport numpy as npimport osimport matplotlib.pyplot as pltnp.random.seed(12345)plt.rc('figure', figsize=(10, 6))from pandas import Series, DataFrameimport pandas as pdnp.set_printoptions(precision=4)
In [3]:
obj = Series([4, 7, -5, 3]) # 创建数组对象obj
Out[3]:
In [4]:
obj.values
Out[4]:
In [5]:
obj.index
Out[5]:
In [6]:
obj2 = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
In [7]:
obj2
Out[7]:
In [8]:
obj2.index
Out[8]:
In [9]:
obj2['a']
Out[9]:
In [10]:
obj2['d'] = 6obj2[['c', 'a', 'd']]
Out[10]:
In [11]:
obj2[obj2 > 0]
Out[11]:
In [12]:
obj2 * 2
Out[12]:
In [13]:
np.exp(obj2)
Out[13]:
In [14]:
'b' in obj2
Out[14]:
In [15]:
'e' in obj2
Out[15]:
In [16]:
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}obj3 = Series(sdata)obj3
Out[16]:
In [17]:
states = ['California', 'Ohio', 'Oregon', 'Texas']obj4 = Series(sdata, index=states)obj4
Out[17]:
In [18]:
pd.isnull(obj4) #检测是否缺失数据
Out[18]:
In [19]:
pd.notnull(obj4)
Out[19]:
In [20]:
obj4.isnull()#检测是否缺失数据
Out[20]:
In [21]:
obj3
Out[21]:
In [22]:
obj4
Out[22]:
In [23]:
obj3 + obj4
Out[23]:
In [24]:
obj4.name = 'population' # 设置名字obj4.index.name = 'state'# 设置索引名字obj4
Out[24]:
In [25]:
obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']obj
Out[25]:
In [26]:
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], 'year': [2000, 2001, 2002, 2001, 2002], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}frame = DataFrame(data)
In [27]:
frame
Out[27]:
In [28]:
DataFrame(data, columns=['year', 'state', 'pop']) # 设置列索引
Out[28]:
In [29]:
frame2 = DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five'])frame2
Out[29]:
In [30]:
frame2.columns
Out[30]:
In [31]:
frame2['state']
Out[31]:
In [32]:
frame2.year
Out[32]:
In [33]:
frame2.ix['three'] # 通过ix,索引字段进行索引
Out[33]:
In [34]:
frame2['debt'] = 16.5 # 列赋值frame2
Out[34]:
In [35]:
frame2['debt'] = np.arange(5.)# 列赋值frame2
Out[35]:
In [36]:
val = Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five']) # 指定列赋值frame2['debt'] = valframe2
Out[36]:
In [37]:
frame2['eastern'] = frame2.state == 'Ohio'frame2
Out[37]:
In [38]:
del frame2['eastern']frame2.columns
Out[38]:
In [39]:
pop = {'Nevada': {2001: 2.4, 2002: 2.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
In [40]:
frame3 = DataFrame(pop)frame3
Out[40]:
In [41]:
frame3.T # 转置,行和列互换
Out[41]:
In [42]:
DataFrame(pop, index=[2001, 2002, 2003])
Out[42]:
In [43]:
pdata = {'Ohio': frame3['Ohio'][:-1], 'Nevada': frame3['Nevada'][:2]}DataFrame(pdata)
Out[43]:
In [44]:
frame3.index.name = 'year'; frame3.columns.name = 'state'frame3
Out[44]:
In [45]:
frame3.values # DF返回二维数组
Out[45]:
In [46]:
frame2.values
Out[46]:
In [47]:
obj = Series(range(3), index=['a', 'b', 'c'])index = obj.indexindex
Out[47]:
In [48]:
index[1:]
Out[48]:
In [49]:
index[1] = 'd' #索引对象不支持更改
In [51]:
index = pd.Index(np.arange(3))index
Out[51]:
In [52]:
obj2 = Series([1.5, -2.5, 0], index=index)obj2
Out[52]:
In [53]:
obj2.index is index
Out[53]:
In [54]:
frame3
Out[54]:
In [55]:
'Ohio' in frame3.columns
Out[55]:
In [56]:
2003 in frame3.index
Out[56]:
In [58]:
obj = Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])obj
Out[58]:
In [59]:
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])obj2
Out[59]:
In [60]:
obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=0) # 重新根据索引排序,有缺失值填入fill_value
Out[60]:
In [61]:
obj3 = Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])obj3.reindex(range(6), method='ffill') # 向前填充
Out[61]:
In [62]:
frame = DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'], columns=['Ohio', 'Texas', 'California'])frame
Out[62]:
In [63]:
frame2 = frame.reindex(['a', 'b', 'c', 'd'])frame2
Out[63]:
In [64]:
states = ['Texas', 'Utah', 'California']frame.reindex(columns=states)
Out[64]:
In [66]:
frame.ix[['a', 'b', 'c', 'd'], states]
Out[66]:
In [67]:
obj = Series(np.arange(5.), index=['a', 'b', 'c', 'd', 'e'])new_obj = obj.drop('c')new_obj
Out[67]:
In [68]:
obj.drop(['d', 'c'])
Out[68]:
In [70]:
data = DataFrame(np.arange(16).reshape((4, 4)), index=['Ohio', 'Colorado', 'Utah', 'New York'], columns=['one', 'two', 'three', 'four'])
In [71]:
data
Out[71]:
In [72]:
data.drop(['Colorado', 'Ohio'])
Out[72]:
In [73]:
data.drop('two', axis=1)
Out[73]:
In [74]:
data.drop(['two', 'four'], axis=1)
Out[74]:
In [77]:
obj = Series(np.arange(4.), index=['a', 'b', 'c', 'd'])obj
Out[77]:
In [78]:
obj['b']
Out[78]:
In [79]:
obj[1]
Out[79]:
In [80]:
obj[2:4]
Out[80]:
In [81]:
obj[['b', 'a', 'd']]
Out[81]:
In [82]:
obj[[1, 3]]
Out[82]:
In [83]:
obj[obj < 2]
Out[83]:
In [84]:
obj['b':'c']
Out[84]:
In [85]:
obj['b':'c'] = 5obj
Out[85]:
In [86]:
data = DataFrame(np.arange(16).reshape((4, 4)), index=['Ohio', 'Colorado', 'Utah', 'New York'], columns=['one', 'two', 'three', 'four'])data
Out[86]:
In [87]:
data['two']
Out[87]:
In [88]:
data[['three', 'one']]
Out[88]:
In [89]:
data[:2]
Out[89]:
In [90]:
data[data['three'] > 5]
Out[90]:
In [91]:
data < 5
Out[91]:
In [92]:
data[data < 5] = 0
In [93]:
data
Out[93]:
In [94]:
data.ix['Colorado', ['two', 'three']]
Out[94]:
In [95]:
data.ix[['Colorado', 'Utah'], [3, 0, 1]]
Out[95]:
In [96]:
data.ix[2] # 选取单个列
Out[96]:
In [97]:
data.ix[:'Utah', 'two']
Out[97]:
In [98]:
data.ix[:'Utah', 'two']
Out[98]:
In [99]:
s1 = Series([7.3, -2.5, 3.4, 1.5], index=['a', 'c', 'd', 'e'])s2 = Series([-2.1, 3.6, -1.5, 4, 3.1], index=['a', 'c', 'e', 'f', 'g'])
In [100]:
s1
Out[100]:
In [101]:
s2
Out[101]:
In [102]:
s1 + s2
Out[102]:
In [103]:
df1 = DataFrame(np.arange(9.).reshape((3, 3)), columns=list('bcd'), index=['Ohio', 'Texas', 'Colorado'])df2 = DataFrame(np.arange(12.).reshape((4, 3)), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon'])df1
Out[103]:
In [104]:
df2
Out[104]:
In [105]:
df1 + df2 # 空值用NaN代替
Out[105]:
In [106]:
df1 = DataFrame(np.arange(12.).reshape((3, 4)), columns=list('abcd'))df2 = DataFrame(np.arange(20.).reshape((4, 5)), columns=list('abcde'))df1
Out[106]:
In [107]:
df2
Out[107]:
In [108]:
df1 + df2
Out[108]:
In [109]:
df1.add(df2, fill_value=0)
Out[109]:
In [110]:
df1.reindex(columns=df2.columns, fill_value=0)
Out[110]:
In [111]:
arr = np.arange(12.).reshape((3, 4))arr
Out[111]:
In [112]:
arr[0]
Out[112]:
In [113]:
arr - arr[0]
Out[113]:
In [114]:
frame = DataFrame(np.arange(12.).reshape((4, 3)), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon'])series = frame.ix[0]frame
Out[114]:
In [115]:
series
Out[115]:
In [116]:
frame - series
Out[116]:
In [117]:
series2 = Series(range(3), index=['b', 'e', 'f'])frame + series2
Out[117]:
In [118]:
series3 = frame['d']frame
Out[118]:
In [119]:
series3
Out[119]:
In [120]:
frame.sub(series3, axis=0)
Out[120]:
In [121]:
frame = DataFrame(np.random.randn(4, 3), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon'])
In [122]:
frame
Out[122]:
In [123]:
np.abs(frame) #求绝对值
Out[123]:
In [124]:
f = lambda x: x.max() - x.min()
In [125]:
frame.apply(f)
Out[125]:
In [126]:
frame.apply(f, axis=1)
Out[126]:
In [127]:
def f(x): return Series([x.min(), x.max()], index=['min', 'max'])frame.apply(f)
Out[127]:
In [128]:
format = lambda x: '%.2f' % xframe.applymap(format)
Out[128]:
In [129]:
frame['e'].map(format)
Out[129]:
In [130]:
obj = Series(range(4), index=['d', 'a', 'b', 'c'])obj
Out[130]:
In [131]:
obj.sort_index()
Out[131]:
In [132]:
frame = DataFrame(np.arange(8).reshape((2, 4)), index=['three', 'one'], columns=['d', 'a', 'b', 'c'])frame.sort_index()
Out[132]:
In [133]:
frame.sort_index(axis=1)
Out[133]:
In [134]:
frame.sort_index(axis=1, ascending=False)
Out[134]:
In [137]:
frame = DataFrame({'b': [4, 7, -3, 2], 'a': [0, 1, 0, 1]})frame
Out[137]:
In [138]:
frame.sort_index(by='b') #将b列按从小到大排序
Out[138]:
In [139]:
frame.sort_index(by=['a', 'b']) # a,b列从小到大排列
Out[139]:
In [140]:
obj = Series([7, -5, 7, 4, 2, 0, 4])obj.rank() # 排名
Out[140]:
In [141]:
obj.rank(method='first')# 出现的顺序进行排名
Out[141]:
In [142]:
obj.rank(ascending=False, method='max') #姜旭排名
Out[142]:
In [143]:
frame = DataFrame({'b': [4.3, 7, -3, 2], 'a': [0, 1, 0, 1], 'c': [-2, 5, 8, -2.5]})frame
Out[143]:
In [144]:
frame.rank(axis=1)
Out[144]:
In [145]:
obj = Series(range(5), index=['a', 'a', 'b', 'b', 'c'])obj
Out[145]:
In [146]:
obj.index.is_unique
Out[146]:
In [147]:
obj['a']
Out[147]:
In [148]:
obj['c']
Out[148]:
In [149]:
df = DataFrame(np.random.randn(4, 3), index=['a', 'a', 'b', 'b'])df
Out[149]:
In [150]:
df.ix['b']
Out[150]:
In [151]:
df = DataFrame([[1.4, np.nan], [7.1, -4.5], [np.nan, np.nan], [0.75, -1.3]], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])df
Out[151]:
In [152]:
df.sum() # 求和(按列)
Out[152]:
In [153]:
df.sum(axis=1)# 求和(按行)
Out[153]:
In [154]:
df.mean(axis=1, skipna=False)# 求平均值(按行)
Out[154]:
In [155]:
df.idxmax() # 最大的值的标签
Out[155]:
In [156]:
df.cumsum() # 累加和
Out[156]:
In [157]:
df.describe() #汇总多个统计数据
Out[157]:
In [158]:
obj = Series(['a', 'a', 'b', 'c'] * 4)obj.describe()
Out[158]:
In [ ]:
### 唯一值,估计值以及成员资格
In [160]:
obj = Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
In [161]:
uniques = obj.unique()uniques
Out[161]:
In [162]:
obj.value_counts()
Out[162]:
In [163]:
pd.value_counts(obj.values, sort=False) #降频排列
Out[163]:
In [164]:
mask = obj.isin(['b', 'c']) #判断是否包含mask
Out[164]:
In [165]:
obj[mask]
Out[165]:
In [166]:
data = DataFrame({'Qu1': [1, 3, 4, 3, 4], 'Qu2': [2, 3, 1, 2, 3], 'Qu3': [1, 5, 2, 4, 4]})data
Out[166]:
In [167]:
result = data.apply(pd.value_counts).fillna(0)result
Out[167]:
In [168]:
string_data = Series(['aardvark', 'artichoke', np.nan, 'avocado'])string_data
Out[168]:
In [169]:
string_data.isnull()
Out[169]:
In [170]:
string_data[0] = Nonestring_data.isnull()
Out[170]:
In [171]:
from numpy import nan as NAdata = Series([1, NA, 3.5, NA, 7])data.dropna() #干掉缺失的数据
Out[171]:
In [172]:
data[data.notnull()]
Out[172]:
In [173]:
data = DataFrame([[1., 6.5, 3.], [1., NA, NA], [NA, NA, NA], [NA, 6.5, 3.]])cleaned = data.dropna() # 一行中只要有all就会被干掉data
Out[173]:
In [174]:
cleaned
Out[174]:
In [175]:
data.dropna(how='all') # 只干掉全为na的行
Out[175]:
In [176]:
data[4] = NAdata
Out[176]:
In [178]:
data.dropna(axis=1, how='all') # axis = 1,干掉全为NA的列
Out[178]:
In [179]:
df = DataFrame(np.random.randn(7, 3))df.ix[:4, 1] = NA; df.ix[:2, 2] = NAdf
Out[179]:
In [180]:
df.dropna(thresh=3) #留一部分观测数据
Out[180]:
In [181]:
df.fillna(0) #用0来填充缺失的数据
Out[181]:
In [182]:
df.fillna({1: 0.5, 3: -1})
Out[182]:
In [185]:
# 通常会返回新对象,但也可以对现有对象进行就地修改_ = df.fillna(0, inplace=True)df
Out[185]:
In [187]:
df = DataFrame(np.random.randn(6, 3))df.ix[2:, 1] = NA; df.ix[4:, 2] = NAdf
Out[187]:
In [186]:
df.fillna(method='ffill')
Out[186]:
In [188]:
df.fillna(method='ffill', limit=2)
Out[188]:
In [189]:
data = Series([1., NA, 3.5, NA, 7])data.fillna(data.mean())
Out[189]:
In [190]:
data = Series(np.random.randn(10), index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'], [1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])data
Out[190]:
In [191]:
data.index
Out[191]:
In [192]:
data['b']
Out[192]:
In [193]:
data['b':'c']
Out[193]:
In [194]:
data.ix[['b', 'd']]
Out[194]:
In [195]:
data[:, 2]
Out[195]:
In [196]:
data.unstack()
Out[196]:
In [197]:
data.unstack().stack()
Out[197]:
In [198]:
frame = DataFrame(np.arange(12).reshape((4, 3)), index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]], columns=[['Ohio', 'Ohio', 'Colorado'], ['Green', 'Red', 'Green']])frame
Out[198]:
In [199]:
frame.index.names = ['key1', 'key2']frame.columns.names = ['state', 'color']frame
Out[199]:
In [200]:
frame['Ohio']
Out[200]:
In [202]:
frame.swaplevel('key1', 'key2')
Out[202]:
In [203]:
frame.sortlevel(1)
Out[203]:
In [204]:
frame.swaplevel(0, 1).sortlevel(0)
Out[204]:
In [205]:
frame.sum(level='key2')
Out[205]:
In [206]:
frame.sum(level='color', axis=1)
Out[206]:
In [207]:
frame = DataFrame({'a': range(7), 'b': range(7, 0, -1), 'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'], 'd': [0, 1, 2, 0, 1, 2, 3]})frame
Out[207]:
In [208]:
frame2 = frame.set_index(['c', 'd'])frame2
Out[208]:
In [209]:
frame.set_index(['c', 'd'], drop=False)
Out[209]:
In [210]:
frame2.reset_index()
Out[210]:
In [211]:
ser = Series(np.arange(3.))ser.iloc[-1]
Out[211]:
In [212]:
ser
Out[212]:
In [213]:
ser2 = Series(np.arange(3.), index=['a', 'b', 'c'])ser2[-1]
Out[213]:
In [214]:
ser.ix[:1]
Out[214]:
In [215]:
ser3 = Series(range(3), index=[-5, 1, 3])ser3
Out[215]:
In [216]:
ser3.iloc[2]
Out[216]:
In [219]:
frame = DataFrame(np.arange(6).reshape((3, 2)), index=[2, 0, 1])frame.iloc[0]
Out[219]:
阅读全文
1 0
- 利用python进入数据分析之pandas的使用
- 利用Python 的 Pandas进行数据分析
- Python数据分析之利用pandas查询数据
- 利用python进入数据分析之usagov_bitly_data数据分析
- 利用python进入数据分析之MovieLens_1M数据分析
- 利用Python进行数据分析(五)之pandas入门
- 利用Python进行数据分析(六)之pandas基本功能
- 利用python进入数据分析之全美婴儿姓名分析
- 利用python进入数据分析之数据加载、存储、文件格式
- python之pandas使用:数据的选择
- 《利用Python进行数据分析》第五章 pandas的基本功能
- 利用python进行数据分析-pandas入门
- 利用Python数据分析:pandas入门(四)
- 利用Python数据分析:pandas入门(五)
- 利用Python数据分析:pandas入门(六)
- 《利用Python 进行数据分析》pandas 总结
- 利用python进入数据分析之准备篇
- 利用python进入数据分析之Numpy基础知识
- hiho 1607 H星人社交网络 [Offer收割]编程练习赛31 Problem A 二分乱搞
- [LeetCode]Reverse Integer
- HDU 5949 Relative atomic mass
- Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(一)
- 飞机大战-java
- 利用python进入数据分析之pandas的使用
- 第二章课后习题
- 笔记5
- 大数据课程笔记4:摘要结构,streaming algorithm
- UVA-1609 Foul Play
- C语言
- PCA主成分分析学习笔记 + Matlab实现
- 二傻的线段树~
- Detect to Track and Track to Detect