pandas 学习笔记

https://ericfu.me/10-minutes-to-pandas/
DataFrame 是由 Series 组成的,内部使用numpy格式存储

用 head 和 tail 查看顶端和底端的几列

df = pd.DataFrame({ 'A' : 1.,
                         'B' : pd.Timestamp('20130102'),
                         'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
                         'D' : np.array([3] * 4,dtype='int32'),
                         'E' : pd.Categorical(["test","train","test","train"]),
                         'F' : 'foo' })

输出:

   A          B    C  D      E    F
0  1.0 2013-01-02  1.0  3   test  foo
1  1.0 2013-01-02  1.0  3  train  foo
2  1.0 2013-01-02  1.0  3   test  foo
3  1.0 2013-01-02  1.0  3  train  foo

df.head()
df.tail(3)
df.columns
df.values
describe() 显示数据的概要。
转置:df.T
对 axis 按照 index 排序(axis=1 是指第二个维度,即:列)
按值排序 df.sort_values(by=’B’)

选择

注意,以下这些对交互式环境很友好,但是作为 production code 请用优化过的 .at, .iat, .loc, .iloc 和 .ix

获取行/列

从 DataFrame 选择一个列,就得到了 Series

df[‘A’]
df[0:3]

loc是通过标签来选择数据

df.loc[‘one’]则会默认表示选取行为’one’的行;
df.loc[:,[‘a’,’b’] ] 表示选取所有的行以及columns为a,b的列;
df.loc[[‘one’,’two’],[‘a’,’b’]] 表示选取’one’和’two’这两行以及columns为a,b的列;
df.loc[‘one’,’a’]与a.loc[[‘one’],[‘a’]]作用是一样的,不过前者只显示对应的值,而后者会显示对应的行和列标签。

通过整数下标选择

这个就和数组类似啦,直接看例子。选出第3行:
df.iloc[3]
选出3~4行,0~1列:
df.iloc[3:5,0:2]
也能用 list 选择
df.iloc[[1,2,4],[0,2]]
也能用 slice
df.iloc[1:3,:]
对应单个元素
df.iloc[1,1]
df.iat[1,1]

布尔值下标

和 MATLAB 类似
基本用法
df[df.A > 0]
没有填充的值等于 NaN
df[df > 0]
isin() 函数:是否在集合中
df2 = df.copy()
df2[‘E’] = [‘one’, ‘one’,’two’,’three’,’four’,’three’]
df2[df2[‘E’].isin([‘two’,’four’])]

Setting

为 DataFrame 增加新的列,按 index 对应

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

通过 label 设置

df.at[dates[0],’A’] = 0

通过下标设置

df.iat[0,1] = 0

缺失值

pandas 用 np.nan 表示缺失值。通常它不会被计算。
Reindexing 允许你改变某个轴的 index(以下代码制造一个示例用的 DataFrame)

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

丢弃有 NaN 的行

df1.dropna()

填充缺失值

df1.fillna(value=5)

获取布尔值的 mask:哪些值是 NaN

pd.isnull(df1)

对于 DataFrame,可以直接 plot

df.plot();
plt.legend(loc=’best’)
plt.show()

读取、写入数据

pd.read_csv(‘foo.csv’)
df.to_csv(‘foo.csv’)

Excel

pd.read_excel(‘foo.xlsx’, ‘Sheet1’, index_col=None, na_values=[‘NA’])
df.to_excel(‘foo.xlsx’, sheet_name=’Sheet1’)

分组、过滤

df.groupby(‘B’).filter(lambda x: len(x) > 2, dropna=False)

append

  grouped = df.groupby(['key1'])
    print("grouped.size:", grouped.size())
    print("END-----------------------------")
    NewDataFrame = pd.DataFrame()
    for x, y in grouped:
        # print(name)
        print(y)
        NewDataFrame=NewDataFrame.append(y)
    print(NewDataFrame)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值