• pandas基础


    list转化为series

    data = [1,2,3,4,5,6]
    array = np.array(data)
    array_str = array.astype('str') #数据类型转换为字符串
    print(array)

    series转化为list

    ori_cent_date = pd.read_excel('/tmp/核心数据库.xlsx')
    ip_list = ori_cent_date.IP.tolist()

    创建Series

    a = [1,2,3,4,5,6]
    b = range(1,7)
    a_series = pd.Series(a,index = ['A','B','C','D','E','F'])
    b_series = pd.Series(b,index = ['A','B','C','D','E','F'])

    字典类型可以直接创建Series

    # 字典可以直接创建Series
    
    d = {
        'qinlu':'handsome',
        'lulu':'graceful'
    }
    
    s2 = pd.Series(d)
    print(s2)
    
    print('-----------------------')
    
    # Series有自动对齐索引功能,NaN表示空,缺失
    s3 = pd.Series(d,index=['qinlu','lulu','qinqin'])
    print(s3)

    DataFrame也可以看做一个字典,只不过它的值为一个序列

    # DataFrame也可以看做一个字典,只不过它的值为一个序列
    
    import pandas as pd
    
    dict = {
        'name':['张三','李四','王五','金锁'],
        'sex':['','','',''],
        'age':[18,19,20,18]
    }
    
    df = pd.DataFrame(dict)
    
    print(df)
    print(df.info())
    
    # 转换数据类型astype
    
    print(df.age.astype('str'))

    行和列操作

    import pandas as pd
    
    dict = {
        'name':['张三','李四','王五','金锁'],
        'sex':['','','',''],
        'age':[18,19,20,18]
    }
    
    df = pd.DataFrame(dict)
    
    # 读取列
    
    print(df['age'])
    print(df['name'])
    print(df[['name','age']])
    
    # 读取行(切片)
    
    print(df[0:3])
    
    # 修改列的值
    
    df['age'] = 18
    # df.age = 18
    print(df)
    
    df['age'] = [18,19,20,19]
    # df.age = [18,19,20,19]
    print(df)
    
    # 增加一列
    
    df['country'] = 'chana'
    print(df)
    
    # 获取索引信息
    print(df.index)

    数据筛选

    import pandas as pd
    
    
    dict = {
        'name':['张三','李四','王五','金锁'],
        'sex':['','','',''],
        'age':[18,19,20,18]
    }
    
    df = pd.DataFrame(dict)
    
    # 切片
    a = df[['age','sex']]
    print(a)
    
    # 筛选sex为男,
    b = df[df.sex == '']
    print(b)
    
    # 筛选年龄大于等于19
    c = df[df.age >= 19]
    print(c)
    
    #筛选性别为女,年龄小于19
    d = df[(df.sex == '') & (df.age < 19)]
    print(d)
    
    能进行布尔判断
    
    e = df.sex == ''
    print(e)
    
    # 当逻辑条件复杂时,这种写法并不优雅,比如性别为男,且年龄在18岁,以及性别为女,且年龄在18岁以上的两类人群,这种过滤条件就比较复杂了。pandas中可以用query函数以类SQL语言执行查询。
    f = df.query('(age == 19 and sex == "女") or (age >= 19 and sex == "男")')
    print(f)
    
    # 利用df.age直接运算
    df.age = df.age + 1
    print(df)

     排序

    import pandas as pd
    file = '/Users/soymilk/微云同步助手(296672942)/OY/study_happy/python_pandas/pandas_excel/data/List.xlsx'
    df = pd.read_excel(file,index_col='ID')
    df = df.sort_values(by=['Worthy','Price'],ascending=[False,False]) # 按值进行排序
    print(df)

    按照条件筛选

    '''
    筛选
    '''
    import pandas as pd
    
    def b1830(a):
        return 18 <=a < 30
    def b85(b):
        return 85 < b
    
    file = '/tmp/Students.xlsx'
    df = pd.read_excel(file,index_col='ID')
    df = df.loc[df.Age.apply(b1830)].loc[df.Score.apply(b85)]
    print(df)
    
    '''
    简化版
    '''
    
    # file = '/tmp/Students.xlsx'
    # df = pd.read_excel(file,index_col='ID')
    # df = df.loc[df.Age.apply(lambda a: 18<=a<30)].loc[df.Score.apply(lambda b: 85<b)]
    # print(df)
    
    '''
    符合逻辑的版本
    '''
    
    # file = '/tmp/Students.xlsx'
    # df = pd.read_excel(file,index_col='ID')
    # df_filter = df[(18<=df.Age) & (df.Age<30) & (85<df.Score)]
    # print(df_filter)

     查看DataFrame属性,数据类型等

    print(type(df))   # 查看df的类型
    print(df.info())   # 有多少数据类型,整个DataFrame占多少字节
    print(df.dtypes)  # 查看DataFrame各个列的数据类型

    深刻理解DataFrame 

    import pandas as pd
    import numpy as np
    
    # 字典形式
    data1 = {'地区':['中国','巴西'],'变电站-x':['变电站-A','变电站-B']}
    df1 = pd.DataFrame(data1,index=['A','B'])
    print(df1)
    print('----------------')
    
    # 序列形式
    data2 = [['中国','变电站-A'],['巴西','变电站-B']]
    df2 = pd.DataFrame(data2,index=['A','B'],columns=['地区','变电站-x'])
    print(df2)

     DataFrame修改列名,修改index

    修改列名

    #
    直接修改:缺点必须写明每一列,不然会报错 a.columns = ['A','B','C'] Out[4]: A B C 0 1 4 7 1 2 5 8 2 3 6 9 ##推荐方法 #每个列名都修改 a.rename(columns={'a':'A', 'b':'B', 'c':'C'}, inplace = True) Out[7]: A B C 0 1 4 7 1 2 5 8 2 3 6 9 #修改指定列名 a.rename(columns={'a':'A', 'c':'C'}, inplace = True) Out[14]: A b C 0 1 4 7 1 2 5 8 2 3 6 9 修改index a.set_index('A')

     利用iloc选取列和行

    # 选取第2列,选取第2-3列(1:3不包括3,即不包括第4列)
    
    df = df[:,1]
    
    df = df[:,1:3]
    
    # 选取第2行,选取第2-3行(1:3不包括3,即不包括第4行)
    
    df = df[1,:]
    
    df = df[1:3,:]

     删除包含某个字符串的行

    # 通过取反获取不包含精准字符串“2000吨”的结果
    
    df=df[~df['产量'].isin(["2000吨"])] 
    
    # 通过取反获取不包含字符串“吨”的结果
    
    df=df[~df['产量'].str.contains('')]

     数据类型转换

    # 数据类型转化成字符串
    df['2016'] = df['2016'].astype('str')
    
    # 数据类型转化为整型
    df['2016'] = df['2016'].astype('int')
    
    # 数据类型转化为浮点型
    df['2016'] = df['2016'].astype('float')

     删除列

    # 删除列(需要赋值)
    df = df.drop(columns=['产量','平均产量'])
    # 直接删除
    df.drop(columns=['产量','平均产量'],inplace=True)
    # 直接删除(只能删除一列)
    del df['产量']

    参考文章:

    条件筛选数据:https://www.cnblogs.com/nxf-rabbit75/p/10105271.html

  • 相关阅读:
    设计模式——装饰模式(Decorator Pattern)
    设计模式——策略模式(Strategy Pattern)
    设计模式——简单工厂模式(SimpleFactory Pattern)
    入博客园三周年记
    android+Service
    surfaceView+canvas+paint+bitmap
    Enable Sublime text 2 to support GBK in Mac
    androidstudio+opencv
    mac下的环境变量PATH
    Curl命令
  • 原文地址:https://www.cnblogs.com/soymilk2019/p/13859712.html
Copyright © 2020-2023  润新知