一、dateframe的索引
pandas之loc与iloc(更多经过pandas优化过的选择方式:)
1、df.loc通过标签索引行数据
2、df.iloc通过位置获取行数据
# pandas优化过的处理方式
import numpy as np
import pandas as pd
a=pd.DataFrame(np.arange(12).reshape(3,4))
b=pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("xyzp"))
print(b)
print(b.loc["a","x"])
print(b.loc["a",["x","p"]])
print(type(b.loc["a",["x","p"]]))
# : 在loc里面是闭合的,即会选到,冒号之后的数据
print(b.loc["a":"c",["x","z"]])
# 选取列
print(b.loc[["a","c"],:])
# 选取行
print(b.loc[:,["x","z"]])
"""
运行结果
x y z p
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
0
x 0
p 3
Name: a, dtype: int32
<class 'pandas.core.series.Series'>
x z
a 0 2
b 4 6
c 8 10
x y z p
a 0 1 2 3
c 8 9 10 11
x z
a 0 2
b 4 6
c 8 10
"""
import numpy as np
import pandas as pd
a=pd.DataFrame(np.arange(12).reshape(3,4))
b=pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("xyzp"))
print(b)
print(b.iloc[1:3,[2,3]])
print(b.iloc[1,:])
print(b.iloc[:,2])
print(b.iloc[:,[2,1]])
print(b.iloc[[0,2],[2,1]])
print(b.iloc[1:,:2])
# 赋值更改数据
b.iloc[1:,:2]=30
print(b)
b.iloc[1:,:2]=np.nan
print(b)
"""
运行结果
x y z p
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
z p
b 6 7
c 10 11
x 4
y 5
z 6
p 7
Name: b, dtype: int32
a 2
b 6
c 10
Name: z, dtype: int32
z y
a 2 1
b 6 5
c 10 9
z y
a 2 1
c 10 9
x y
b 4 5
c 8 9
x y z p
a 0 1 2 3
b 30 30 6 7
c 30 30 10 11
x y z p
a 0.0 1.0 2 3
b NaN NaN 6 7
c NaN NaN 10 11
"""
二、bool索引和缺失数据的处理
1、bool索引
pandas之字符串方法
2、缺失数据的处理
数据缺失通常两种情况:
a、空,None等,在pandas是NaN(和np.nan)一样
b、我们让其为0
判断是否为NAN:pd.isnull(df).pd.notnull(df)
处理方式1:删除NaN所在的行列dropna(axis=0,how='any',inplace=False)
处理方式2:填充数据,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)
处理0的数据:t[t==0]=np.nan(不是每次为0都要处理,计算平均值等情况,nan是不参与计算的,但是0会