- 1. Series
- 2. Dataframe
- 3. 读取csv
- 4. 数据操作
- 4.1 排序
- 4.2 删除
- 4.3 基本运算
- 4.4 去重
- 5. 层次化索引
pandas是为解决数据分析任务而创建的
from pandas import Series,Dataframe import pandas as pd
- Series: 一维数组,类似于Python中的基本数据结构list,区别是Series只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。就像数据库中的列数据;
- Dataframe: 二维的表格型数据结构。很多功能与R中的data.frame类似。可以将Dataframe理解为Series的容器;
- Panel:三维的数组,可以理解为Dataframe的容器。
obj=Series([4,7,-5,3]) Out: 0 4 1 7 2 -5 3 3 ''' Series的交互式显示的字符串表示形式是索引在左边,值在右边。因为我们没有给数据指定索引,一个包含整数0到N-1这里N是数据的长度)的默认索引被创建。你可以分别的通过它的values和index属性来获取 Series的数组表示和索引对象: ''' obj.values # [4,7,-5,3] obj.index # [0,1,2,3]
# 创建series对象
obj2=Series([4,7,-5,3],index=['d','b','a','c'])
Out:
d 4
b 7
a -5
c 3
# 可以传进来字典然后创建series
In [7]:sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
In [8]:obj3=Series(sdata)
In [9]:obj3
Out[9]:
Ohio 35000
Texas 71000
Oregon 16000
Utah 5000
2. Dataframe
Dataframe既有行索引还有列索引,它有一组有序的列,每列既可以是不同类型(数值、字符串、布尔型)的数据,或者可以看做由Series组成的字典。
dictionary = {'state': ['0hio', '0hio', '0hio', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = Dataframe(dictionary) # 创建dataframe
frame = Dataframe(dictionary, index=['one', 'two', 'three', 'four', 'five']) # 修改行名
frame['add'] = [0, 0, 0, 0, 0] # 添加一列
value = Series([1, 3, 1, 4, 6, 8], index=[0, 1, 2, 3, 4, 5])
frame['add1'] = value # 添加series类型
print(frame)
这里添加series没有添加上…原因还在寻找中…
3. 读取csv
# 如果数据集中有中文的话,最好在里面加上 encoding = 'gbk' ,以避免乱码问题。后面的导出数据的时候也一样 header 关键字告诉Pandas哪些是数据的列名。如果没有列名的话就将它设定为 None。
df = pd.read_csv('uk_rain_2014.csv', header=0)
df.head(5) # 查看前5行
df.tail(5) # 查看后5行
len(df) # 总行数
df.columns = ['','',..] # 修改列名
4. 数据操作 4.1 排序
Series,Dataframe用sort_index()按索引排序,sort_values()按值排序;
obj = Series(range(4), index=['d','a','b','c'])
obj.sort_index()
Out[74]:
a 1
b 2
c 3
d 0
dtype: int64
frame = Dataframe(np.arange(8).reshape((2,4)),index=['three', 'one'],columns=['d','a','b','c'])
Out:
d a b c
three 0 1 2 3
one 4 5 6 7
frame.sort_index()
Out:
d a b c
one 4 5 6 7
three 0 1 2 3
frame.sort_index(axis=1, ascending=False)
'''
help(pd.Dataframe.sort_index) 查看用法
axis 只有两个值 : 0 and 1,df中只有两个index分别是表最左一列的时间和表最上一行的dabc
axis=0对应的是对左边一列的index进行排序,ascending=False代表降序,ascending=True代表升序
axis=1对应的是对上边一行的index进行排序,
so,res =
Out: ---->
d c b a
three 0 3 2 1
one 4 7 6 5
'''
# 按值排序
frame = Dataframe({'b':[4, 7, -3, 2], 'a':[0, 1, 0, 1]})
frame.sort_values(by='b') #Dataframe必须传一个by参数表示要排序的列
Out[97]:
a b
2 0 -3 |
3 1 2 |
0 0 4 |
1 1 7 ↓
4.2 删除
删除Series的元素或Dataframe的某一行(列)
drop(labels, axis=0)
需要注意的是drop()返回的是一个新对象,元对象不会被改变。
df = Dataframe(np.arange(9).reshape(3,3), index=['a','c','d'], columns=['oh','te','ca'])
Out[18]:
oh te ca
a 0 1 2
c 3 4 5
d 6 7 8
df.drop('a') # 默认删除行
Out[19]:
oh te ca
c 3 4 5
d 6 7 8
df.drop(['oh','te'],axis=1) # axis = 1删除列
Out[20]:
ca
a 2
c 5
d 8
4.3 基本运算
Dataframe中的算术运算是df中对应位置的元素的算术运算,如果没有共同的元素,则用NaN代替。
也可用fill_value = ?传入填充值
df1 = Dataframe(np.arange(12.).reshape((3,4)),columns=list('abcd'))
df2 = Dataframe(np.arange(20.).reshape((4,5)),columns=list('abcde'))
df1+df2 # df1.add(df2,fill_value = 0)
Out[9]:
a b c d e
0 0 2 4 6 NaN
1 9 11 13 15 NaN
2 18 20 22 24 NaN
3 NaN NaN NaN NaN NaN
4.4 去重
Dataframe的duplicated方法返回一个布尔型Series,表示各行是否是重复行。
drop_duplicates()用于去除重复的行数,
df = Dataframe({'k1':['one']*3 + ['two']*4, 'k2':[1,1,2,3,3,4,4]})
Out[2]:
k1 k2
0 one 1
1 one 1
2 one 2
3 two 3
4 two 3
5 two 4
6 two 4
df.duplicated()
Out[3]:
0 False
1 True
2 False
3 False
4 True
5 False
6 True
dtype: bool
df.drop_duplicates()
Out[4]:
k1 k2
0 one 1
2 one 2
3 two 3
5 two 4
5. 层次化索引
data = Series(np.random.randn(10), index = [['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd' ],[1,2,3,1,2,3,1,2,2,3]])
Out[2]:
a 1 0.169239
2 0.689271
3 0.879309
b 1 -0.699176
2 0.260446
3 -0.321751
c 1 0.893105
2 0.757505
d 2 -1.223344
3 -0.802812
data['b':'d'] # b-d
Out[3]:
b 1 -0.699176
2 0.260446
3 -0.321751
c 1 0.893105
2 0.757505
d 2 -1.223344
3 -0.802812
data[:, 2] # 每一种index里面的第二个
Out[4]:
a 0.689271
b 0.260446
c 0.757505
d -1.223344
# 将Series转化成Dataframe:
data.unstack()
Out[5]:
1 2 3
a 0.169239 0.689271 0.879309
b -0.699176 0.260446 -0.321751
c 0.893105 0.757505 NaN
d NaN -1.223344 -0.802812
来源:头歌



