DataFrame结构
DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】(共用同一个索引)。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
- 行索引:index
- 列索引:columns
- 值:values(numpy的二维数组)
ds1 = pd.Series([1, 2, 3, 4], name="id")
ds2 = pd.Series([10, 20, 30, 40], name="语文")
ds3 = pd.Series([100, 200, 300, 400], name="数学")
df1 = pd.DataFrame([ds1, ds2, ds3])
df1
结果:
DataFrame的创建
最常用的方法是传递一个字典来创建。DataFrame以字典的键作为每一【列】的名称,以字典的值(一个数组)作为每一列。
此外,DataFrame会自动加上每一行的索引(和Series一样)。
df2 = pd.DataFrame({"id": ds1, "china": ds2, "math": ds3})
df2
结果:
默认情况下,如果不指定index参数和columns,那么他们的值将从0开始的数字替代。
df3 = pd.DataFrame(np.random.randn(4, 3))
df3
结果:
DataFrame属性:values、columns、index、shape
score_data = np.random.randint(60, 100, size=(5, 3))
stu_name = ['张三', '李四', '王五', '赵六', '钱七']
subject = ['数学', '语文', '英语']
df1 = pd.DataFrame(data=score_data, columns=subject, index=stu_name)
df1
结果:
DataFrame的索引操作
- 读取excel文件
df1 = pd.read_excel('豆瓣电影数据.xlsx')
#显示前5个
df1.head()
- 索引选择数据
- 选择列数据
- 通过类似字典的方式
- 通过属性的方式
- 选择列数据
df1['名字'].head()
df1.名字.tail()
- 选择行数据
- 使用.ix[]来进行行索引
- 使用.loc[]加index来进行行索引
- 使用.iloc[]加整数来进行行索引
同样返回一个Series,index为原来的columns。
df1.loc[1]
df1.iloc[1]
【注意】 直接用中括号时:
- 索引表示的是列索引
- 切片表示的是行切片
df1[1:5]
- 添加/删除数据
- df.append
dit = {
'名字': '复仇者联盟3',
'投票人数': 23145,
'类型': '剧情/科幻',
'产地': '美国',
'上映时间': '2018-05-4 00:00:00',
'时长': 142,
'年代': 2018,
'评分': 8.7,
'首映地点': '美国',
}
s = pd.Series(data=dit)
s
df1 = df1.append(s, ignore_index=True)
df1.tail()
- 删除数据
- df.drop
df1.drop([38739]).tail()
投影数据
- [ ]索引操作就是列操作
- 单列操作
- 多列投影
- 增加列属性
df1[["名字", "类型"]].head()
df1['序号'] = range(1, len(df1)+1)
df1.head()
df1.drop('序号', axis=1).head()
- 条件过滤
- 选取产地等于美国的电影
df1[df1.产地 == '美国'].head()
- 选取产地等于美国,并且评分小于5分的电影
df1[(df1.产地=='美国') & (df1.评分<=5)].head()
- 选取产地等于美国或者中国,并且评分小于5分的电影
df1[((df1.产地=='美国') | (df1.产地=='中国大陆')) & (df1.评分<=5)].head()
数据操作
(1) DataFrame之间的运算
同Series一样:
在运算中自动对齐不同索引的数据 如果索引不对应,则补NaN
(2) Series与DataFrame之间的运算
【重要】
使用Python操作符:以行为单位操作(参数必须是行),对所有行都有效。(类似于numpy中二维数组与一维数组的运算,但可能出现NaN)
使用pandas操作函数:
axis=0:以列为单位操作(参数必须是列),对所有列都有效。
axis=1:以行为单位操作(参数必须是行),对所有行都有效。
缺失值及异常值的处理
- 缺失值的处理
方法:- dropna 根据标签中缺失值进行过滤,删除缺失值
- fillna 对缺失值进行填充
- isnull 返回一个布尔值对象,判断哪些值是缺失值
- notnull isnull的否定值
- 填充缺失值
fillna - 对于异常值的处理
比如投票人数小于0, 投票人数为小数了
在不影响整体数据分布时,可以直接删除就行
其他属性异常值,以格式转换为主