Pandas常用方法和使用技巧

  在Python 3 环境下,根据实际使用Pandas的一些经验,简单总结了一下Pandas的使用要点。

  Pandas 有三种结构, 都可以指定索引,默认情况下,索引值从0。三种结构分别为:

  • Serie:一维同类型结构
  • DataFrame:二维结构,每列的类型相同
  • Panel:三维结构

1. Series初始化

data = [1,2,3,4]
a = Series(data)
b = Series(data, index = ['a','b','c','d'])
print(a,b)

2. DataFrame初始化, 有横轴index和纵轴column.可以传入数组或者字典构建。

dates = pd.date_range('20180101', periods = 6)
a = DataFrame(np.random.randn(6,4), index = dates, columns = ['A','B','C','D'])
b = DataFrame({'A': 1,
'B': pd.Timestamp('20180101'),
'C': Series(2, index = list(range(4))),
'D': pd.Categorical(['Test','Train','test','train'])
})

3. 数据查看。 下标(横轴)用index查看,列标用columns, 数值用values查看简单的统计数据.describe, 转置.T。

dates = pd.date_range('20180101', periods = 6)
a = DataFrame(np.random.randn(6,4), index = dates, columns = ['A','B','C','D'])
print(a.index, a.columns, a.values)
print(a.describe(), a.T)

  4. 排序,sort_index(axis=0, ascending=True)是对行或列的索引的排序, 整体一起移动。sort_values(by, axis=0, ascending=True) 根据by指定的列或行里的值排序, axis需要与by的轴匹配。

dates = pd.date_range('20180101', periods = 6)
a = DataFrame(np.random.randn(6,4), index = dates, columns = ['A','B','C','D'])
b = a.sort_index(axis = 0, ascending = False)
c = a.sort_index(axis = 1, ascending = False)
d = a.sort_values(by = 'C', axis = 0, ascending = True)

  5. DataFrame 索引和切片. 保留了Numpy用数值范围进行切片的方法获取行,同时可以用索引标签范围切片获取行和列最好使用.at, .iat, .loc, .iloc 和 .ix 方法进行索引。

dates = pd.date_range('20180101', periods = 6)
a = DataFrame(np.random.randn(6,4), index = dates, columns = ['A','B','C','D'])
b = a[0:3]   # 数值范围对行进行切片
b2 = a['20180102':'20180105']
b3 = a['B'] = a.B    # a['B','C']这种不行,需要为 a[['B','C']],用.lco,.ix 可以方便的选择多行或多列
b4 = a.loc[:, ['B','C']]    # 此种形式对行和列切片类似Numpy,ix也有 一样的效果
b5 = a.at[dates[1], 'A']
b6 = a[a.A > 0]
b6 = a[a < 0]

  6.  算数运算和数据对齐。Pandas的一个重要功能便是可以对不同的索引对象进行算术运算,如果存在不同的索引,则结果的索引就是所有索引的并集,不同索引值的地方进行填充,默认为NaN,然后进行算术运算。用add, sub,div,mul进行操作,可以在运算前指定补充的值。

df = DataFrame(np.random.rand(3,3), columns = list('bcd'), index = ['B','C','D'] )
df2 = DataFrame(np.random.rand(4,3), columns = list('bde'), index = ['A','B','C','E'])
df3 = df + df2
df4 = df.add(df2, fill_value = 0)

posted @ 2018-02-08 22:06  小日头  阅读(518)  评论(0)    收藏  举报