本文是学习《利用Python进行数据分析》的部分笔记,在这里感谢作者
汇总和计算描述统计:
1,一次性产生多个汇总设计:
df=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'])
df
Out[37]:
one two
a 1.40 NaN
b 7.10 -4.5
c NaN NaN
d 0.75 -1.3
df.describe()
Out[38]:
one two
count 3.000000 2.000000
mean 3.083333 -2.900000
std 3.493685 2.262742
min 0.750000 -4.500000
25% NaN NaN
50% NaN NaN
75% NaN NaN
max 7.100000 -1.300000
df.info()
<class 'pandas.core.frame.DataFrame'>
Index: 4 entries, a to d
Data columns (total 2 columns):
one 3 non-null float64
two 2 non-null float64
dtypes: float64(2)
memory usage: 96.0+ bytes
2,唯一值,值计数以及成员资格:
(1)unique可以计算唯一值:
obj=Series(['c','a','d','a','a','b','b','c','c'])
a=obj.unique()
a
Out[42]: array(['c', 'a', 'd', 'b'], dtype=object)
返回的唯一值是未排序的,如果需要的话,可以对结果再次进行排序,(a.sort())。value_counts用于计算一个Series中各值出现的频率,为了便于查看,结果Series是按值频率降序排列的。
obj.value_counts()
Out[43]:
a 3
c 3
b 2
d 1
dtype: int64
value_counts还是一个顶级pandas方法,可用于任何数组或序列:
pd.value_counts(obj.values,sort=False)
Out[44]:
c 3
b 2
d 1
a 3
dtype: int64
最后是isin,他用于判断矢量化集合的成员资格,可用于选取Series中或DataFrame列中数据的子集:
mask=obj.isin(['b','c'])
mask
Out[46]:
0 True
1 False
2 False
3 False
4 False
5 True
6 True
7 True
8 True
dtype: bool
3;处理缺失数据:
pandas对象上的所有描述统计都排除了缺失数据。
(1)fillna:用指定值或者插值方法填充缺失数据:
(2)isnull:返回一个含有布尔值的对象,这些布尔值表示哪些值是缺失值NA。
(3)dropna:根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阀值调节对缺失值的容忍度。
dropna默认丢弃任何含有缺失值的行:
from numpy import nan as NA
data=DataFrame([[1,6.5,3],[1,NA,NA],[NA,NA,NA],[NA,6.5,3]])
data
Out[52]:
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
cleaned=data.dropna()
cleaned
Out[54]:
0 1 2
0 1.0 6.5 3.0
传入how='all',将只丢弃全为NA的那些行:
data.dropna(how='all')
Out[55]:
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
3 NaN 6.5 3.0
要用这种方式丢弃列,只需要传入axis=1即可:
data.dropna(axis=1,how='all')
Out[58]:
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
4.填充缺失数据:
fillna方法,参数是要填充的值,也可以是字典。
df.fillna(0)
Out[60]:
one two
a 1.40 0.0
b 7.10 -4.5
c 0.00 0.0
d 0.75 -1.3
若是通过一个字典调用fillna,就可以实现对不同的列填充不同的值。
df=DataFrame(np.random.randn(7,3))
df.ix[:4,1]=NA
df.ix[:2,2]=NA
df
Out[66]:
0 1 2
0 -0.581682 NaN NaN
1 -1.741565 NaN NaN
2 -0.970582 NaN NaN
3 -0.250483 NaN -0.553435
4 -0.351286 NaN -1.171738
5 -1.179798 0.496161 1.302779
6 0.964473 0.166469 -1.907879
df.fillna({1:0.5,3:-1})
Out[67]:
0 1 2
0 -0.581682 0.500000 NaN
1 -1.741565 0.500000 NaN
2 -0.970582 0.500000 NaN
3 -0.250483 0.500000 -0.553435
4 -0.351286 0.500000 -1.171738
5 -1.179798 0.496161 1.302779
6 0.964473 0.166469 -1.907879
fillna默认会返回新对象,但也可以对现有对象进行修改,只需要传入参数:inplace=True
fillna有一个参数是method,表示插值方式,默认=ffill,前向填充。limit=数字限制填充的数量。