• 关于pandas


    enumerate()

    • 循环读出每个列的索引值和列名
      • for col_num, col_name in enumerate(df):

    dataframe.groupby(条件选择)

    • 用法

    • DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)

      • by :接收映射、函数、标签或标签列表;用于确定聚合的组。
      • axis : 接收 0/1;用于表示沿行(0)或列(1)分割。
      • level : 接收int、级别名称或序列,默认为None;如果轴是一个多索引(层次化),则按一个或多个特定级别分组。
      • as_index:接收布尔值,默认Ture;Ture则返回以组标签为索引的对象,False则不以组标签为索引。
    • 示例

    df = pd.DataFrame({'Gender' : ['男', '女', '男', '男', '男', '男', '女', '女', '女'],
                       'name' : ['周杰伦', '蔡依林', '林俊杰', '周杰伦', '林俊杰', '周杰伦',
                                  '田馥甄','蔡依林', '田馥甄'],
                       'income' : [4.5, 2.9, 3.8, 3.7, 4.0, 4.1, 1.9, 4.1, 3.2],
                       'expenditure' : [1.5, 1.9, 2.8, 1.7, 4.1, 2.5, 1.1, 3.4, 1.2]
                      })
    print(df)
    

    输出:

    Gender name  income  expenditure
    0      男  周杰伦     4.5          1.5
    1      女  蔡依林     2.9          1.9
    2      男  林俊杰     3.8          2.8
    3      男  周杰伦     3.7          1.7
    4      男  林俊杰     4.0          4.1
    5      男  周杰伦     4.1          2.5
    6      女  田馥甄     1.9          1.1
    7      女  蔡依林     4.1          3.4
    8      女  田馥甄     3.2          1.2
    
    • 根据其中一列分组
    df_expenditure = df.groupby(['Gender'])
    

    输出:(迭代器?)

    <pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000265342B3320>
    
    df_expenditure = df.groupby(['Gender'])
    for group_name, group_data in df_expenditure:
        print(group_data)
    

    输出:

    ('女',   Gender name  income  expenditure
    1      女  蔡依林     2.9          1.9
    6      女  田馥甄     1.9          1.1
    7      女  蔡依林     4.1          3.4
    8      女  田馥甄     3.2          1.2)
    ('男',   Gender name  income  expenditure
    0      男  周杰伦     4.5          1.5
    2      男  林俊杰     3.8          2.8
    3      男  周杰伦     3.7          1.7
    4      男  林俊杰     4.0          4.1
    5      男  周杰伦     4.1          2.5)
    
    df_expenditure = df.groupby(['Gender'])['name']
    for group_name, group_data in df_expenditure:
        print(group_name)
        print(group_data)
    

    输出:(主键为性别,分类找出对应的所有名字)

    ('女', 1    蔡依林
    6    田馥甄
    7    蔡依林
    8    田馥甄
    Name: name, dtype: object)
    ('男', 0    周杰伦
    2    林俊杰
    3    周杰伦
    4    林俊杰
    5    周杰伦
    
    • 最后可以利用sum(),mean(),count(),size()来做计算

    dataframe.sort_values

    • 案例
    df_expenditure = df.groupby(['name','Gender']).sum()
    df_expenditure = df_expenditure.sort_values(by='expenditure', ascending=True)
    print(df_expenditure)
    

    输出:

                           income  expenditure
    name Gender                     
    田馥甄  女          5.1          2.3
    蔡依林  女          7.0          5.3
    周杰伦  男         12.3          5.7
    林俊杰  男          7.8          6.9
    
    • 以'name','Gender'为组合主键,按照expenditure升序排列

    dataframe.isin

    • 语法
    df_list = df['name'].isin(['周杰伦','蔡依林'])
    print(df_list)
    words_pd_select = df[df_list]
    print(words_pd_select)
    
    • 输出:
    0     True
    1     True
    2    False
    3     True
    4    False
    5     True
    6    False
    7     True
    8    False
    Name: name, dtype: bool
    
    Gender name  income  expenditure
    0      男  周杰伦     4.5          1.5
    1      女  蔡依林     2.9          1.9
    3      男  周杰伦     3.7          1.7
    5      男  周杰伦     4.1          2.5
    7      女  蔡依林     4.1          3.4
    
    • 条件选择,选择特定维度,特定的值

    mean,sum,drop

    axis=1

    people=DataFrame(np.ones((5,5)),
                     columns=['a','b','c','d','e'],
                     index=['Joe','Steve','Wes','Jim'])
    
    print(people.mean(axis=1))
    print (people.drop('Jim',axis=0))
    

    输出:

    Joe      5.0
    Steve    5.0
    Wes      5.0
    Jim      5.0
    
    
             b    c    d    e
    Joe    1.0  1.0  1.0  1.0
    Steve  1.0  1.0  1.0  1.0
    Wes    1.0  1.0  1.0  1.0
    Jim    1.0  1.0  1.0  1.0
    
    
    第一个列子 df.mean(axis=1)代表沿着列水平方向计算均值,
    而第二个列子df.drop(name, axis=1) 代表将name对应的列
    标签沿着水平的方向依次删掉。
    

    isnull()的运用

    • 查找缺失值
    • isnull().any(axis)
      • axis = 0 选择列 默认
      • axis = 1 选择行
    • isnull().any().sum()
      • 计算计算缺失值列总数
    • dataframe[df.isnull().any(axis=1)]
      • 输出含有null值的整行数据

    .str.cat

    • 多列拼接
      • 适用于一维数据Series或字符串,可以使用astype(np.str),转换成字符串格式
    • 示例
    rfm_pd['d'] = rfm_pd_tmp['a'].str.cat(rfm_pd_tmp['b']).str.cat(
        rfm_pd_tmp['b'])
    新增d列,把a.b.c列字符拼接
    输入:pd.Series(['a','b','c']).str.cat(sep=';')
    输出:'a;b;c'
    
    输入:pd.Series(['a','b','c']).str.cat(['A','B','C'], sep=';')
    输出:
    0  a;A
    1  b;B
    2  c;C
    
    

    pd.concat

    • 多个dataframe拼接
    • 示例
    a = pd.DataFrame(np.ones((2,2)),columns=['pro1', 'pro2'])
    print(a)
    
    b = pd.DataFrame(np.random.random((2,1)), columns=['dd'])
    print(b)
    predict_pd = pd.concat((a,b), axis=1)
    print(predict_pd)
    
    • 输出
    pro1  pro2
    0   1.0   1.0
    1   1.0   1.0
    
             dd
    0  0.236130
    1  0.058731
    
       pro1  pro2        dd
    0   1.0   1.0  0.236130
    1   1.0   1.0  0.058731
    

    pd.fillna()

    • pd.fillna(值) 所有缺失值填充
    • pd.fillna(字典) 给指定的列填充指定的值
      • 字典:{列名:值}

    交叉表 crosstab

    • 交叉表是用于统计分组频率的特殊透视表
    pd.crosstab(主属性, 需要分组统计的属性,margins=True)
    margins=True 表示添加累加列
    

    用正则取出属性

    df.filter(regex=**)
    

    get_dummies 特征因子化

    以Cabin为例,原本一个属性维度,因为其取值可以是[‘yes’,‘no’],而将其平展开为’Cabin_yes’,'Cabin_no’两个属性

    原本Cabin取值为yes的,在此处的"Cabin_yes"下取值为1,在"Cabin_no"下取值为0
    原本Cabin取值为no的,在此处的"Cabin_yes"下取值为0,在"Cabin_no"下取值为1

    dummies_Cabin = pd.get_dummies(data_train['Cabin'], prefix= 'Cabin')
    print(dummies_Cabin.head())
    
    • 输出
       Cabin_No  Cabin_Yes
    0         1          0
    1         0          1
    2         1          0
    3         0          1
    4         1          0
    

    add_prefix(str)

    • 对于Series,行标签是前缀的。对于DataFrame,列标签是前缀的。
    参数: prefix : str要在每个标签前添加的字符串。
    返回: Series 或 DataFrame具有更新标签的新Series或DataFrame。
  • 相关阅读:
    【数据结构与算法】用go语言实现数组结构及其操作
    ElasticSearch搜索引擎
    【系统】Libevent库和Libev
    pod管理调度约束、与健康状态检查
    使用yaml配置文件管理资源
    Oracle中exists替代in语句
    【oracle】通过存储过程名查看package名
    解决Flink消费Kafka信息,结果存储在Mysql的重复消费问题
    利用Flink消费Kafka数据保证全局有序
    Oracle 字符集的查看和修改
  • 原文地址:https://www.cnblogs.com/rener0424/p/11242652.html
Copyright © 2020-2023  润新知