Pandas 中的坑

Series 操作

DataFrame 的index操作

索引操作多而杂,现总结如下。
参考 Indexing and Selecting Data

df1 = pd.DataFrame(np.random.randn(6, 4),
                    index=list('abcdef'),
                    columns=list('ABCD'))

    A   B   C   D
a   0.333368    0.953575    0.189191    0.186499
b   0.344776    0.940556    0.624198    0.278640
c   0.269827    0.449311    0.679678    0.769818
d   0.910729    0.024516    0.745065    0.399805
e   0.868005    0.822731    0.908870    0.376258
f   0.141232    0.983130    0.730339    0.782900

df.loc['a']
df.loc['a', 'B']
df.loc[['a','b']]
df.loc[['a','b'], ['B','C']]

遍历操作

函数式编程方式,apply方式(个人比较推荐这种方式)

def f(x, a):
    return np.log(x) / np.log(a)
df.pipe(f, 3)  # 等价于 f(df, 3)
df.apply(np.mean)   # 对每一列求均值
df.apply(np.mean, axis=1)  # 对每一行求均值

iteration 迭代

for idx, row in df.iterrows():
    print idx, row

for row in df.itertuples():
    print row

for c, col in df.iteritems():
    print c, col
s = pd.Series(pd.date_range('20130101 09:10:12', periods=4))
s.dt.hour

向量化string操作

通过访问Series的.str属性,例如s.str.lower()可以将每一个元素变成小写。可以在.str属性上使用
所有的字符串函数,就相当于每一个元素使用那样。

DataFrame的修改

## 删除一列,返回删除后的DataFrame,对原DataFrame没有影响
df.drop('colname', axis=1)

## 在原DataFrame上删除一列
df.drop('colname', axis=1, inplace=True)

DataFrame API

category 类型数据处理

IO操作

read_csv

最常用的文本文件读取函数。一些重要的参数如下:
- sep 字段分隔符,默认为,,有些文件用\t
- header 头部用来做index的行序号,None表示没有
- names 用来指定行的label,一个list
- index_col 是否使用index列,默认false
- nrows 读取的行数
- true_values, false_values 真假值字符串替换
- na_values NAN值列表,默认作为NAN的值为'-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN', '#N/A N/A', '#N/A', 'N/A', 'NA', '#NA', 'NULL', 'NaN', '-NaN', 'nan', '-nan', ''
- iterator 默认false,指定为true用来迭代地读大文件,可以用chunksize指定每次读取的行数。

可视化plot

TIPS