Pandas 基础总结

Pandas 是python的数据分析库,让数据处理变得非常简单,处理速度上也有很多优化,比python 的内置方法相比有很大的优势。
先学两个网站:

  1. python data analysis library
  2. 十分钟入门Pandas:10 Minutes to pandas
  3. [Pandas函数使用总结](https://mp.weixin.qq.com/s/jCRTBteONIBDmvpieQlP6A)

约定俗成导入:

from pandas import Series,DataFrame
Series可以存储任意数据类型:

  1. 是一位标记数组,numpy的一位array;
  2. Python基本数据结构list
    DataFrame是二维标记数据结构,列可以是不同的数据类型,可接收多种输入

s = pd.Series([1,3,5,np.nan,6,8])
df=pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

查看检查数据

df.dtypes : 查看不同的数据类型:
df.head(), df.tail(3):查看frame的头和尾:
df.index,df.columns,df.values: 显示索引,列和底层的numpy数据
df.describe(): 快速统计
df.T :对数据转置
df.sort_index(axis=1, ascending=False): 按轴排序
df.sort_values(by='B'): 按值排序

选择数据,推荐使用经过优化的pandas的数据访问方式:.at,.iat,.loc和.ix

  1. 直接获取

df['A']:返回单独的一列,等同于df.A
df[0:3]: 前三行,第一行是索引

  1. 通过标签选择
  • 获取一个交叉区域

df.loc[dates[0]]

  • 在多轴上选择

df.loc[:,['A','B']]

  1. 通过位置选择
  • 传递数值(行)df.iloc[3]
  • 数值切片 df.iloc[3:5,0:2]
  • 指定位置的列表 df.iloc[[1,2,4],[0,2]]
  • 对行进行切片 df.iloc[1:3,:]
  • 对列进行切片 df.iloc[:,1:3]
  • 获取特定的值 df.iloc[1,1] == df.iat[1,1]
  1. 布尔索引
  • 一个单独列来过滤 df[df.A > 0]
  • where过滤:> df[df.A > 0]
  • isin()过滤:

设置

  • 加一个新的列:

s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130102', periods=6))
df['F'] = s1

  • 标签:df.at[dates[0],'A'] =0
  • 位置:df.iat[0,1] = 0
  • numpy数组:df.loc[:,'D'] = np.array([5] * len(df))
  • where操作:

df2 = df.copy()
df2[df2 > 0] = -df2

缺失值处理

在pandas中,使用np.nan来代替缺失值,这些值将默认不会包含在计算中。

  • reindex()方法可以对指定轴上的索引进行改变/增加/删除操作,这将返回原始数据的一个拷贝:

df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
df1.loc[dates[0]:dates[1],'E'] = 1

  • 去掉包含缺失值的行:

df1.dropna(how='any')

  • 对缺失值进行填充:

df1.fillna(value=5)

  • 对数据进行布尔填充:

pd.isnull(df1)

应用数据

  • 应用统计函数: df.apply(lambda x: x.max() - x.min())
  • 直方图统计: s.value_counts()
  • Series对象在其str属性中配备了一组字符串处理方法,可以很容易的应用到数组中的每个元素: s.str.lower()

合并

Pandas提供了大量的方法能够轻松的对Series,DataFrame和Panel对象进行各种符合各种逻辑关系的合并操作。

  • Concat :

pieces = [df[:3], df[3:7], df[7:]]
pd.concat(pieces)

  • Join 类似于SQL类型的合并

left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
pd.merge(left, right, on='key')

  • Append 将一行连接到一个DataFrame上

df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])
s = df.iloc[3]
df.append(s, ignore_index=True)

分组

对于”group by”操作,我们通常是指以下一个或多个操作步骤:
-(Splitting)按照一些规则将数据分为不同的组;
-(Applying)对于每组数据分别执行一个函数;
-(Combining)将结果组合到一个数据结构中;

df.groupby('A').sum()
df.groupby(['A','B']).sum()

重塑

  • stack()方法在DataFrame列的层次上压缩
  • 整合DataFrame或者Series(MultiIndex作为索引),stack()的逆运算是unstack(),默认情况下unStack上一次的情况。
  • 透视表

pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])

你可能感兴趣的:(Pandas 基础总结)