pandas基础 -- DataFrame结构

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, 投票人数为小数了
    在不影响整体数据分布时,可以直接删除就行
    其他属性异常值,以格式转换为主

猜你喜欢

转载自blog.csdn.net/weixin_43958804/article/details/88087219