本章将重点讲解在数据分析中Series和DataFrame常用途理方法。 重新索引
reindex方法,重新索引,即创建一个新索引的新对象。适用于Series和DataFrame
1、Series
####对于Series
s1 = pd.Series({'a':1,'b':2,'c':3,'d':4})
#根据新索引重新陈列,索引值不存在即为缺失值,fill_value表示缺失值的填充
s2 = s1.reindex(list('abcdef'),fill_value=0)
#a 1.0
b 2.0
c 3.0
d 4.0
e 0.0
f 0.0
dtype: float64
#对于工夫序列,重新索引可以经过method参数引入插值
s3 = pd.Series(['a','b','c'],index=[0,2,4])
#ffill表示前向填充,bfill表示后向
s4 = s3.reindex(range(6),method='ffill')
#0 a
1 a
2 b
3 b
4 c
5 c
dtype: object
运用实例:
s1 = pd.Series(range(4), index=['d', 'a', 'b', 'c'])
s1.sort_index()
#a 1
b 2
c 3
d 0
dtype: int64
#按行索引排序
df1 = DataFrame(np.arange(8).reshape((2, 4)), index=['three', 'one'],
columns=['d', 'a', 'b', 'c'])
df1.sort_index()
# d a b c
one 4 5 6 7
three 0 1 2 3
#按列索引排序
df1.sort_index(axis=1)
# a b c d
three 1 2 3 0
one 5 6 7 4
#列索引递减
df1.sort_index(axis=1, ascending=False)
# d c b a
three 0 3 2 1
one 4 7 6 5
引见一些pandas常用的数学以及统计方法。
df1 = pd.DataFrame([[1.4, np.nan], [7.1, -4.5],
[np.nan, np.nan], [0.75, -1.3]],
index=['a', 'b', 'c', 'd'],
columns=['one', 'two'])
df1.sum() #axis表示按照哪个轴停止计算
#one 9.25
two -5.80
dtype: float64
df1.mean(axis=1, skipna=False)
#a NaN
b 1.300
c NaN
d -0.275
dtype: float64
df.idxmax() #最大值对应的索引
#one b
two d
dtype: object
df1.cumsum() #累加
# one two
a 1.40 NaN
b 8.50 -4.5
c NaN NaN
d 9.25 -5.8
df1.describe()
# one two
count 3.000000 2.000000
mean 3.083333 -2.900000
std 3.493685 2.262742
min 0.750000 -4.500000
25% 1.075000 -3.700000
50% 1.400000 -2.900000
75% 4.250000 -2.100000
max 7.100000 -1.300000
缺失值处理
缺失值的处理是数据分析中一个重要的知识点,pandas在处理缺失值方面也提供一些重要的方法。
isnull()notnull()dropna()fillna()
s1= pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])
s1.isnull() #判别系列外面元素缺失,是前往True
#0 False
1 False
2 True
3 False
dtype: bool
s1.notnull() #判别系列外面元素不缺失,是前往True
#0 True
1 True
2 False
3 True
dtype: bool
#pandas内置的None也被以为是缺失值
#经过缺失值停止数据挑选
s1[s1.notnull()]
#0 aardvark
1 artichoke
3 avocado
dtype: object
#缺失值过滤
s1.dropna() #对于DataFrame有一些参数
0 aardvark
1 artichoke
3 avocado
dtype: object
from numpy import nan as NA
data = DataFrame([[1., 6.5, 3.], [1., NA, NA],
[NA, NA, NA], [NA, 6.5, 3.]])
data.dropna() #默许删除有缺失值的行
# 0 1 2
0 1.0 6.5 3.0
data.dropna(how='all') #删除全部缺失的行
# 0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
3 NaN 6.5 3.0
data[4] = NA #加一列全部缺失
data.dropna(axis=1, how='all') #按列删除全缺失的
# 0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
2 NaN NaN NaN
3 NaN 6.5 3.0
data.dropna(thresh=3) #按行非缺失值的个数
# 0 1 2 4
0 1.0 6.5 3.0 NaN
data.dropna(subset=[0,1,2],thresh=1) #subset设置需求统计的列范围
# 0 1 2 4
0 1.0 6.5 3.0 NaN
1 1.0 NaN NaN NaN
3 NaN 6.5 3.0 NaN
#缺失填充
df1 = DataFrame(np.random.randn(7, 3))
df1.ix[:4, 1] = NA; df1.ix[:2, 2] = NA
df1
# 0 1 2
0 1.824875 NaN NaN
1 -0.131578 NaN NaN
2 2.169461 NaN NaN
3 0.029610 NaN 0.118110
4 -0.748532 NaN 0.152677
5 -1.565657 -0.562540 -0.032664
6 -0.929006 -0.482573 -0.036264
df1.fillna(0)
# 0 1 2
0 1.824875 0.000000 0.000000
1 -0.131578 0.000000 0.000000
2 2.169461 0.000000 0.000000
3 0.029610 0.000000 0.118110
4 -0.748532 0.000000 0.152677
5 -1.565657 -0.562540 -0.032664
6 -0.929006 -0.482573 -0.036264
df1.fillna({1: 0.5, 3: -1}) #按列填充
# 0 1 2
0 1.824875 0.500000 NaN
1 -0.131578 0.500000 NaN
2 2.169461 0.500000 NaN
3 0.029610 0.500000 0.118110
4 -0.748532 0.500000 0.152677
5 -1.565657 -0.562540 -0.032664
6 -0.929006 -0.482573 -0.03626
由于有一些文件含义有些有成绩的数据行,直接运用pandas自带的数据读取方法能够会出现成绩,因此需求一些手工处理。本节引见python内置的csv模块处理数据。
import csv
#csv读取数据
f = open('file.csv')
reader = csv.reader(f)
for line in reader:
print(line) #每一行以列表的方式呈现
#数据解析
lines = list(csv.reader(open('file.csv')))
header, values = lines[0], lines[1:]
data_dict = {h: v for h, v in zip(header, zip(*values))}