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 = 0 , ascending = 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 = None , ascending = True , inplace = False , kind ='quicksort' , na_position ='last' , sort_remaining = True , by = 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 = 0 , level = 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