pandas入门学习五

本文是学习《利用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=数字限制填充的数量。


 




 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值