目录
import pandas as pd
Pandas常用数据类型
1.Series一维,带标签数组(即索引,第一列为索引,第二列为数据)
Series对象本质上由两个数组构成,一个数组构成对象的键(index索引),一个数组构成对象的值(values),键->值
2.DataFrame二维,Series容器
Series的使用
t = pd.Series([1,2,31,12,3,4])
'''
0 1
1 2
2 31
3 12
4 3
5 4
dtype: int64
'''
print(type(t)) # <class 'pandas.core.series.Series'>
为Series指定索引值
t2 = pd.Series([1,23,2,2,1], index = list("abcde"))
a 1
b 23
c 2
d 2
e 1
dtype: int64
通过字典创建Series
temp_dict = {"name":"xiaoming","age":30,"tell":10086}
t3 = pd.Series(temp_dict)
print(t3)
'''
name xiaoming
age 30
tell 10086
dtype: object
'''
更改dtype
t2.astype(float)
a 1.0
b 23.0
c 2.0
d 2.0
e 1.0
dtype: float64
切片和索引
可以像字典一样直接用key或索引取值
切片:直接传入start end 或者步长即可
索引:一个的时候直接传入序号或者index,多个的时候传入序号或index列表
t3[0] #'xiaoming'
t3["age"] #30
t3[["age","tell"]]
age 30
tell 10086
dtype: object
还可以通过布尔索引来判断值取出:
t[t>4]
2 31
3 12
dtype: int64
DataFrame的使用
import pandas as pd
import numpy as np
pd.DataFrame(np.arange(12).reshape(3,4))
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
DataFrame既有行索引又有列索引:
行索引:横向,index,0轴,axis=0
列索引:纵向,columns,1轴,axis=1
t1 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("WXYZ"))
W X Y Z
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
可以分别对index和columns切片或索引取值
DataFrame基础属性
- DataFrame是Series的容器
- DataFrame也可以传入字典(key相同,values为一个列表),或用列表传入多个key相同的字典
df.shape #行数,列数
df.dtypes #列数据类型
df.ndim #数据维度
df.index #行索引
df.columns #列索引
df.vaues #对象值,ndarray数组
df.head(3) #显示头部几行,默认5行
df.tail(3) #显示尾部几行,默认5行
df.info #相关信息预览:行数,列数,列索引,列非空值个数,行类型,列类型,内存占用
df.describe() #快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值
排序
t1_sorted = t1.sort_values(by = "W")
选择
通过标签进行获取:loc
t1.loc["a","Z"] # 3
t1.loc["a"]
W 0
X 1
Y 2
Z 3
Name: a, dtype: int32t1.loc[["a","b"],["W","Z"]]
W Z
a 0 3
b 4 7t1.loc["a":"c",:] # 注意loc中的冒号是闭合区间
W X Y Z
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
通过位置进行获取:iloc
t1.iloc[0]
W 0
X 1
Y 2
Z 3
Name: a, dtype: int32t1.iloc[:,0]
a 0
b 4
c 8
Name: W, dtype: int32
同样也可以使用布尔索引
&且 |或
缺失数据的处理
判断数据是否为NaN:pd.isnull(xxx)或pd.notnull(xxx)
处理方式
- 删除nan所在的行列dropna(axis=0,how="any",inplace=False
- 填充数据,t.fillna(t.mean())或t.fiallna(t.median())或t.fillna(0)
其中,在删除nan所在行列时,how为any代表只要有nan就都删,或者all为全部是nan时才删;inplace代表是否原地替换该DataFrame