Pandas

Pandas

import pandas as pd

Pandas读取csv文件

pd.read_csv()
参数很多 常用的例如
pd.read_csv('***.csv',delimiter=',',encoding='utf-8',names=['date','film','Box'])
参数一:读取的目标文件
参数二:csv文件的分隔符
参数三:编码
参数四:设置列名

读取后是一个DataFrame格式
           date    film       Box
0    2010-05-09   唐山大地震   51315.0
1    2010-05-09    婚前试爱    5659.0
2    2010-05-16     老男孩    1599.0
3    2010-05-23      剑雨    2224.0

排序

sort_values

按照任意轴的值进行排序

pd.sort_values( by , axis = 0ascending = True , inplace = False , kind ='quicksort' , na_position ='last' )
by
axis
ascending
inplace
kind
na_position
常用 
sc.sort_values(by='date',axis=0,ascending=False)
by后面的参数可以跟一个列表

sort_index

sort_index(by=None)

按标签排序物体(沿轴)

DataFrame. sort_index ( axis = 0 , level = Noneascending = True , inplace = False , kind ='quicksort' , na_position ='last' , sort_remaining = Trueby = None
axis
level
ascending
inplace
kind
na_position
sort_remaining

删除

drop_duplicates

去除重复

df.drop_duplicates()

dropna

返回带有给定轴上标签的对象,交替地丢失任何或全部数据

DataFrame. dropna ( axis = 0 , how ='any' , thresh = None , subset = None , inplace = False
axis
how
thresh
subset
inplace

drop

返回带有请求轴中标签的新对象。

DataFrame. drop ( labels , axis = 0level = None , inplace = False , errors ='raise'
labels
axis
level
inplace
errors
常用:
方法一:直接del DF['column-name']

方法二:采用drop方法,有下面三种等价的表达式:

1. DF= DF.drop('column_name', 1);

2. DF.drop('column_name',axis=1, inplace=True)

3. DF.drop([DF.columns[[0,1, 3]]], axis=1,inplace=True)   # Note: zero indexed

选择

df20105[(df20105.film == '老男孩')&(df20105.BoxOfficeReturn<2000)]

分组 groupby

groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False)

基础用法

 groupby 方法的调用本身并不涉及运算,因此速度很快。而在操作这个 grouped 对象的时候,还是将其看成一个保存了实际数据的对象比较方便。比如我们可以直接对其应用很多方法,或索引切片

print df20105n['BoxOfficeReturn'].groupby([df20105n.index,df20105n.film])

<pandas.core.groupby.SeriesGroupBy object at 0x00000000047A0630>

所以 分组是为了方便数据处理例如

print df20105n['BoxOfficeReturn'].groupby([df20105n.index,df20105n.film]).mean()
print df20105n['BoxOfficeReturn'].groupby([df20105n.index,df20105n.film]).sum()
上面是分别求 平均值和 总和

对分组进行迭代

GroupBy 对象是可以通过 for 循环迭代的,可以产生一组二元组,分别为分组名和组内数据。下面是一个多重分组键的情况:

for i,v in df20105n['BoxOfficeReturn'].groupby([df20105n.index,df20105n.film]):
    print i
    print '-'*50
    print v
    print '-=-'*50

合并

连接concat

concat(list)

只说merge连接

数据集的合并(merge)或连接(join)运算是通过一个或多个键将行链接起来的。这些运算是关系型数据库的核 心。pandas的merge函数是对数据应用这些算法的主要切入点。

df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7),'aaa':range(7)}) 
df2 = pd.DataFrame({'key': ['a', 'b', 'd'], 'data2': range(3),'aaa':range(3)})

   data1 key
0      0   b
1      1   b
2      2   a
3      3   c
4      4   a
5      5   a
6      6   b
   data2 key
0      0   a
1      1   b
2      2   d

多对一的合并

df1中的数据有多个被标记为a和b的行,而df2中key列的每一个值则仅相应一行。对这些对象调用merge就可以得到:

pd.merge(df1, df2)

   data1 key  data2
0      0   b      1
1      1   b      1
2      6   b      1
3      2   a      0
4      4   a      0
5      5   a      0

注意:没有指明要用哪个列进行连接。假设没有指定,merge就会将重叠列的列名当做键。只是,最好显示指定一下:

pd.merge(df1, df2,on='key')

   data1 key  data2
0      0   b      1
1      1   b      1
2      6   b      1
3      2   a      0
4      4   a      0
5      5   a      0

多对多的合并操作

df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'],'data1': range(6)})
df2 = pd.DataFrame({'key': ['a', 'b', 'a', 'b', 'd'],'data2': range(5)})

In [19]: df1
Out[19]: 
   data1 key
0      0   b
1      1   b
2      2   a
3      3   c
4      4   a
5      5   b

[6 rows x 2 columns]

In [20]: df2
Out[20]: 
   data2 key
0      0   a
1      1   b
2      2   a
3      3   b
4      4   d

[5 rows x 2 columns]
pd.merge(df1, df2, on='key', how='left')

    data1 key  data2
0       0   b      1
1       0   b      3
2       1   b      1
3       1   b      3
4       5   b      1
5       5   b      3
6       2   a      0
7       2   a      2
8       4   a      0
9       4   a      2
10      3   c    NaN

[11 rows x 3 columns]

依据多个键进行合并

传入一个由列名组成的列表就可以:

left = pd.DataFrame({'key1': ['foo', 'foo', 'bar'],'key2': ['one', 'two', 'one'],'lval': [1, 2, 3]})
right = pd.DataFrame({'key1': ['foo', 'foo', 'bar', 'bar'],'key2': ['one', 'one', 'one', 'two'],'rval': [4, 5, 6, 7]})

pd.merge(left, right, on=['key1', 'key2'], how='outer')

  key1 key2  lval  rval
0  foo  one     1     4
1  foo  one     1     5
2  foo  two     2   NaN
3  bar  one     3     6
4  bar  two   NaN     7
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值