pandas之DataFrame
1、DataFrame创建(二维,Series容器)
d1 = pd.DataFrame(np.arange(12).reshape(3, 4))
通过index和columns指定行索引和列索引
d2 = pd.DataFrame(np.arange(12).reshape(3, 4), index=list("abc"), columns=list("ABCD"))
当给DataFrame传入一个字典时
temp_dict = {"name":["xiaoming", "xiaohong"], "age":[18, 20], "tel":[10086, 10010]}
pd.DataFrame(temp_dict)
当传入一个以字典为元素的列表时
t1 = [{"name": "xiaohong", "age": 18, "tel": 10086}, {"name": "xiaogang", "tel": 10000}, {"name": "xiaoming", "age": 12}]
d4 = pd.DataFrame(t1)
当值缺失时使用NaN填补
DateFrame的基础属性
df.shape # 行数,列数
df.dtypes # 列数据类型
df.ndim # 数据维度
df.index # 行索引
df.columns # 列索引
df.values # 对象值,二维ndarray数组
DataFrame整体情况查询
df.head(3) # 显示头几行,默认5行
df.tail(3) # 显示末尾几行,默认5行
df.info() # 相关信息概览:行数,列数,列索引,列非空值个数,列类型,内存占用
df.describe() # 快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值
2、DateFrame的索引与切片
在DataFrame中使用索引与切片之前通常使用
df_sorted = df.sort_values(by="Count_AnimalName", ascending=False) # by属性指定按照那一列,ascending指定按照升序还是降序,默认升序
取某些行和Series类似
df_sorted[:100] # 取前100行
df_sorted["age"] # 取age那一列
还有更多经过pandas优化过的选择方式:
(1)df.loc通过标签索引行数据
(2)df.iloc通过位置获取行数据
假设有d2如图:
d2.loc["a", "D"] # 取出位于a行D列的数据3
d2.loc["a"] # 取出第a行,是一个Series,索引为ABCD
d2.loc[:"A"] # 取出A列,是一个Series,索引为abc
d2.loc[["a", "c"],:["A", "C"]] # 取多行多列
d2.iloc[1:2,[2,3]] # 按位置取数据,1~2行,2,3列
d2.iloc[1:2,1:3] # 1~2行,1~3列
3、bool索引
df[df["Count_AnimalName"]>180] # 取出所有df中Count_AnimalName大于180的数据
df[(df["Count_AnimalName"]>180)&(df["Count_AnimalName"]<500)] # 当有多个条件时不能连续写
4、缺失数据处理
数据缺失通常有两种情况:
一种是空,None等,在pandas是NaN(和np.nan一样)
另一种是我们让其为0
判断数据是否为NaN:`
pd.isnull(df)
pd.notnull[df]
处理方式1:删除NaN所在的行列dropna(axis=0)
t3.dropna(axis=0) # 删除t3中含nan的行,
t3.dropna(axis=0, how="all") # 删除一行中全部是NaN的行,how属性默认为any
t3.dropna(axis=0, how="all", inplace=False) # inplace属性表示是否进行原地修改
处理方式2:填充数据
t.fillna(t.mean()) # 填充均值
t["age"] = t["age"].fillna(t["age"].mean()) # 单纯操作某一列