python数分三剑客之pandas详细使用方法1(Series部分)

Series是一种类似于一维数组的对象,由下面两个部分组成
values:一维数据     
index:相关的数据索引标签
1.series创建
1.1 由列表和numpy数组创建,默认索引为0~N-1的整数型索引,索引不一定是数字也不一定从零开始,可以改变

s1 = pd.Series(li1)
    n = np.array(li1)
    s2 = pd.Series(n)  # 除了dtype不一样,其他的都一样
    print(s1.values)  # ndarray的一维数组
    print(s1.index)  # 索引

修改索引

    s1.index = ['A', 'B', 'C', 'D']
    s2.index = list('BCDE')

由索引访问值

   print(s1.A)
    print(s1['A'])
    print(s2.B)
    print(s2['B'])
由字典创建 key是索引,value是value
dict1 = {
        'a': 11,
        'b': 22,
        'c': 33,
        'd': 44
    }
    s3 = pd.Series(dict1)
    dict2 = {
        'a': np.random.randint(1, 10, size=(2, 3)),
        'b': np.random.randint(1, 10, size=(2, 3)),
        'c': np.random.randint(1, 10, size=(2, 3)),
        'd': np.random.randint(1, 10, size=(2, 3))
    }
    s4 = pd.Series(dict2)
    s5 = pd.Series([1, 2, 3], index=['李白', '鲁班', '杜甫'], name='历史人物')

2.Series的索引

2.1 显示索引(基于标签选择)
使用index中的元素作为索引值
使用.loc[] 推荐
s6 = pd.Series({'python': 150, 'numpy': 100, 'pandas': 130})
    print(s6['python'])  # 值
    print(s6.numpy)
    print(s6[['python', 'numpy']])  # 这样使用两个中括号取出来的还是一个Series,一次取多个数据
    print(s6[['python']])
    # 使用loc[]
    print(s6.loc['python'])  # 值
    print(s6.loc[['python', 'numpy']])
    print(s6.loc[['pandas']])
2.2 隐式索引(即不使用index,使用数字下标)(基于位置选择)
print(s6[0])
    print(s6[[0, 2]])
    print(s6[[0]])
    # 使用 iloc[],注意不能与.loc[]混用
    print(s6.iloc[0])
    print(s6.iloc[[0, 2]])
    print(s6.iloc[[0]])

3.Series的切片

3.1 隐式切片:左闭右开
print(s6[1:4])

print(s6.iloc[1:4])
3.2 显示切片:左闭右闭
print(s6['python':'pandas'])
    print(s6.loc['python':'pandas'])

4.Series的基本属性和方法

属性 shape形状 size元素个数  index索引 value值 name名字

dict3 = {
        'a': 11,
        'b': 22,
        'c': 33,
        'd': 44,
        'e': 55,
        'f': 66,
        'g': 77
    }
    s7 = pd.Series(dict3)
    s7.head(2)  # 查看前2条数据
    s7.tail()
方法 head()查看前几条数据,默认五条  tail()查看后几条数据,默认5条  取值顺序不变,返回值是一个Series

5.检测数据确实

一共有四种常用的方法:

pd.isnull()   pd.notnull()   isnull()   notnull()
s8 = pd.Series(['ZHANGSAN', 'LISI', 'WANGWU', np.nan])
    s8.isnull()  # 判断是否为空,返回值是一个Series,index没变,values会变成True 或者False,dtype为bool
    pd.isnull(s8)  # 同上
    s8.notnull()  # 判断是否不为空,返回值是一个Series,index没变,values会变成True 或者False,dtype为bool
    pd.notnull(s8)  # 同上
5.1 通过bool值索引过滤数据
# 过滤空置
    selected_s8 = s8[[True, False, False, False, True, True, True]]  # 用bool值做索引,写True的位置保留,写False的位置删除
    # 根据这个原理和检测数据值缺失的函数
    condi1 = s8.isnull()
    full_data_s8 = s8[~condi1]  # condi1中空值是True,所以~取反True和False;之后将condi1放到索引出就完成了空值的过滤
6 Series的运算
6.1 适用于numpy的运算也适用于Series
# 基本运算
    s7 + 100
    s7 / 100
    s7 // 2
    s7 ** 2
    s7 % 2
6.2 Series之间的运算,不论位置,只论索引
在运算中自动对齐索引
如果索引不对应,则补NaN
Series没有广播机制
    s9 = pd.Series(np.random.randint(10, 100, size=3))
    s10 = pd.Series(np.random.randint(10, 100, size=3))
    s910 = s9 + s10  # 对应元素相加(本质是索引的顺序相同)
    s11 = pd.Series(np.random.randint(10, 100, size=4))
    s911 = s9 + s11  # 没有的元素会为NaN
    # 若修改了索引顺序, 则按照索引相加(而不是按照顺序对应相加)
    new_s9 = s9[1, 2, 0]  # 调整s9的索引顺序
    s109 = s9 + s10  # s109和s910的结果是不一样的
    # 若想保留所有的index,则需要使用add()函数
    s9.add(s11, fill_value=0)  # s9没有的位置,用0填充

7 遍历Series

7.1使用for循环遍历
    for value in s9:
        print(value)
7.2 使用Pandas提供的迭代器
    for index, value in s9.items():
        print('Index: {}, Value: {}'.format(index, value))

你可能感兴趣的:(python,pandas,开发语言)