欢迎光临
我们一直在努力

【pandas】查看数据、更改列名

  • 导入包
  • import pandas as pd
    import numpy as np
    from typing import Any
    from mapping import *

  • 读取文件,查看数据
  • dataset = pd.ExcelFile('Project Dataset.xlsx')
    # 获取表单名
    print(dataset.sheet_names)

    ['Data Dict', 'E Comm']

    # 遍历所有工作表并读取前五行数据
    sheets_dict = {}
    for sheet_name in dataset.sheet_names:
    tmp_sheet = dataset.parse(sheet_name = sheet_name)
    print(f'======{sheet_name}=======')
    print('====head======')
    print(tmp_sheet.head())
    sheets_dict[sheet_name] = tmp_sheet

    ======Data Dict=======
    ====head======
    Unnamed: 0 Unnamed: 1 Unnamed: 2 \\
    0 NaN Data Variable
    1 NaN E Comm CustomerID
    2 NaN E Comm Churn
    3 NaN E Comm Tenure
    4 NaN E Comm PreferredLoginDevice

    Unnamed: 3
    0 Discerption
    1 Unique customer ID
    2 Churn Flag
    3 Tenure for using the platform (months)
    4 Preferred login device of customer
    ======E Comm=======
    ====head======
    CustomerID Churn Tenure PreferredLoginDevice CityTier WarehouseToHome \\
    0 50001 1 4.0 Mobile Phone 3 6.0
    1 50002 1 NaN Phone 1 8.0
    2 50003 1 NaN Phone 1 30.0
    3 50004 1 3.0 Phone 3 15.0
    4 50005 1 3.0 Phone 1 12.0

    MaritalStatus AgeGroup Gender HourSpendOnApp OrderCount \\
    0 Single 3 Female 3.0 1.0
    1 Single 4 Male 3.0 1.0
    2 Single 4 Male 2.0 1.0
    3 Single 4 Male 2.0 1.0
    4 Single 3 Male NaN 1.0

    OrderAmountHikeFromlastYear DaySinceLastOrder PreferedOrderCat \\
    0 11.0 5.0 Laptop & Accessory
    1 15.0 0.0 Household
    2 14.0 3.0 Household
    3 23.0 3.0 Laptop & Accessory
    4 11.0 3.0 Household

    NumberOfStreamerFollowed SatisfactionScore Complain CouponUsed \\
    0 9 2 1 1.0
    1 7 3 1 0.0
    2 6 3 1 0.0
    3 8 5 0 0.0
    4 3 5 0 1.0

    DiscountAmount
    0 159.93
    1 120.90
    2 120.28
    3 134.07
    4 129.60

    # 查看数据类型
    for key,value in sheets_dict.items():
    print(key)
    print(type(value))

    Data Dict
    <class 'pandas.core.frame.DataFrame'>
    E Comm
    <class 'pandas.core.frame.DataFrame'>

    # 保存E Comm表单, csv格式
    tmp = sheets_dict['E Comm']
    tmp.to_csv('data.csv',index=False,sep=",",header=True) # 不保存索引, 分割符:, 保留列名
    data = pd.read_csv('data.csv')
    print(data.head())

    CustomerID Churn Tenure PreferredLoginDevice CityTier WarehouseToHome \\
    0 50001 1 4.0 Mobile Phone 3 6.0
    1 50002 1 NaN Phone 1 8.0
    2 50003 1 NaN Phone 1 30.0
    3 50004 1 3.0 Phone 3 15.0
    4 50005 1 3.0 Phone 1 12.0

    MaritalStatus AgeGroup Gender HourSpendOnApp OrderCount \\
    0 Single 3 Female 3.0 1.0
    1 Single 4 Male 3.0 1.0
    2 Single 4 Male 2.0 1.0
    3 Single 4 Male 2.0 1.0
    4 Single 3 Male NaN 1.0

    OrderAmountHikeFromlastYear DaySinceLastOrder PreferedOrderCat \\
    0 11.0 5.0 Laptop & Accessory
    1 15.0 0.0 Household
    2 14.0 3.0 Household
    3 23.0 3.0 Laptop & Accessory
    4 11.0 3.0 Household

    NumberOfStreamerFollowed SatisfactionScore Complain CouponUsed \\
    0 9 2 1 1.0
    1 7 3 1 0.0
    2 6 3 1 0.0
    3 8 5 0 0.0
    4 3 5 0 1.0

    DiscountAmount
    0 159.93
    1 120.90
    2 120.28
    3 134.07
    4 129.60

    col = data.columns
    print(type(col))

    <class 'pandas.core.indexes.base.Index'>

    print(col) # 打印列名

    Index(['CustomerID', 'Churn', 'Tenure', 'PreferredLoginDevice', 'CityTier',
    'WarehouseToHome', 'MaritalStatus', 'AgeGroup', 'Gender',
    'HourSpendOnApp', 'OrderCount', 'OrderAmountHikeFromlastYear',
    'DaySinceLastOrder', 'PreferedOrderCat', 'NumberOfStreamerFollowed',
    'SatisfactionScore', 'Complain', 'CouponUsed', 'DiscountAmount'],
    dtype='object')

    col_list = col.tolist() # 改变类型
    print(type(col_list))
    print(col_list)

    <class 'list'>
    ['CustomerID', 'Churn', 'Tenure', 'PreferredLoginDevice', 'CityTier', 'WarehouseToHome', 'MaritalStatus', 'AgeGroup', 'Gender', 'HourSpendOnApp', 'OrderCount', 'OrderAmountHikeFromlastYear', 'DaySinceLastOrder', 'PreferedOrderCat', 'NumberOfStreamerFollowed', 'SatisfactionScore', 'Complain', 'CouponUsed', 'DiscountAmount']

    from mapping import COL_MAPPING
    data.rename(columns=COL_MAPPING,inplace=True) # 重命名列名,替换
    print(data.columns)

    Index(['客户编号', '客户流失标识', '客户在网时长(月)', '首选登录设备', '城市等级', '仓库到住宅距离(公里)', '婚姻状况',
    '年龄分组', '性别', 'APP使用时长(小时/天)', '下单次数', '订单金额较去年涨幅(%)', '距上次下单天数',
    '偏好订单品类', '关注主播数量', '满意度评分', '投诉标识', '优惠券使用次数', '优惠金额(元)'],
    dtype='object')

    print(data['客户编号'].head(n=10))

    0 50001
    1 50002
    2 50003
    3 50004
    4 50005
    5 50006
    6 50007
    7 50008
    8 50009
    9 50010
    Name: 客户编号, dtype: int64

    print(data.shape)

    (5630, 19)

    print(data.info)

    <bound method DataFrame.info of 客户编号 客户流失标识 客户在网时长(月) 首选登录设备 城市等级 仓库到住宅距离(公里) 婚姻状况 \\
    0 50001 1 4.0 Mobile Phone 3 6.0 Single
    1 50002 1 NaN Phone 1 8.0 Single
    2 50003 1 NaN Phone 1 30.0 Single
    3 50004 1 3.0 Phone 3 15.0 Single
    4 50005 1 3.0 Phone 1 12.0 Single
    … … … … … … … …
    5625 55626 0 13.0 Pad 1 30.0 Married
    5626 55627 0 13.0 Mobile Phone 1 13.0 Married
    5627 55628 0 1.0 Mobile Phone 1 11.0 Married
    5628 55629 0 23.0 Pad 3 9.0 Married
    5629 55630 0 8.0 Mobile Phone 1 15.0 Married

    年龄分组 性别 APP使用时长(小时/天) 下单次数 订单金额较去年涨幅(%) 距上次下单天数 \\
    0 3 Female 3.0 1.0 11.0 5.0
    1 4 Male 3.0 1.0 15.0 0.0
    2 4 Male 2.0 1.0 14.0 3.0
    3 4 Male 2.0 1.0 23.0 3.0
    4 3 Male NaN 1.0 11.0 3.0
    … … … … … … …
    5625 2 Male 3.0 2.0 18.0 4.0
    5626 5 Male 3.0 2.0 16.0 NaN
    5627 2 Male 3.0 2.0 21.0 4.0
    5628 5 Male 4.0 2.0 15.0 9.0
    5629 2 Male 3.0 2.0 13.0 3.0

    偏好订单品类 关注主播数量 满意度评分 投诉标识 优惠券使用次数 优惠金额(元)
    0 Laptop & Accessory 9 2 1 1.0 159.93
    1 Household 7 3 1 0.0 120.90
    2 Household 6 3 1 0.0 120.28
    3 Laptop & Accessory 8 5 0 0.0 134.07
    4 Household 3 5 0 1.0 129.60
    … … … … … … …
    5625 Laptop & Accessory 6 1 0 1.0 150.71
    5626 Fashion 6 5 0 1.0 224.91
    5627 Laptop & Accessory 3 4 1 1.0 186.42
    5628 Laptop & Accessory 4 4 0 2.0 178.90
    5629 Laptop & Accessory 4 3 0 2.0 169.04

    [5630 rows x 19 columns]>

    loc 根据标签查询行数据

    print(type(data.loc(1)))

    <class 'pandas.core.indexing._LocIndexer'>

    print(data.loc[1]) # 查看第一行(根据索引)

    客户编号 50002
    客户流失标识 1
    客户在网时长(月) NaN
    首选登录设备 Phone
    城市等级 1
    仓库到住宅距离(公里) 8.0
    婚姻状况 Single
    年龄分组 4
    性别 Male
    APP使用时长(小时/天) 3.0
    下单次数 1.0
    订单金额较去年涨幅(%) 15.0
    距上次下单天数 0.0
    偏好订单品类 Household
    关注主播数量 7
    满意度评分 3
    投诉标识 1
    优惠券使用次数 0.0
    优惠金额(元) 120.9
    Name: 1, dtype: object

    print(data.loc[0:2])

    客户编号 客户流失标识 客户在网时长(月) 首选登录设备 城市等级 仓库到住宅距离(公里) 婚姻状况 年龄分组 \\
    0 50001 1 4.0 Mobile Phone 3 6.0 Single 3
    1 50002 1 NaN Phone 1 8.0 Single 4
    2 50003 1 NaN Phone 1 30.0 Single 4

    性别 APP使用时长(小时/天) 下单次数 订单金额较去年涨幅(%) 距上次下单天数 偏好订单品类 \\
    0 Female 3.0 1.0 11.0 5.0 Laptop & Accessory
    1 Male 3.0 1.0 15.0 0.0 Household
    2 Male 2.0 1.0 14.0 3.0 Household

    关注主播数量 满意度评分 投诉标识 优惠券使用次数 优惠金额(元)
    0 9 2 1 1.0 159.93
    1 7 3 1 0.0 120.90
    2 6 3 1 0.0 120.28

    print(data.loc[data['APP使用时长(小时/天)']>3]) # 先查看对应列,再看条件

    客户编号 客户流失标识 客户在网时长(月) 首选登录设备 城市等级 仓库到住宅距离(公里) 婚姻状况 \\
    1408 51409 0 33.0 Mobile Phone 3 31.0 Single
    1433 51434 0 3.0 Phone 1 8.0 Married
    1536 51537 0 NaN Phone 1 15.0 Single
    2815 52816 1 5.0 Mobile Phone 3 7.0 Single
    2816 52817 1 1.0 Phone 1 9.0 Single
    … … … … … … … …
    5617 55618 0 14.0 Phone 1 9.0 Married
    5618 55619 0 9.0 Mobile Phone 1 8.0 Married
    5620 55621 0 3.0 Mobile Phone 1 35.0 Single
    5623 55624 0 5.0 Pad 1 12.0 Single
    5628 55629 0 23.0 Pad 3 9.0 Married

    年龄分组 性别 APP使用时长(小时/天) 下单次数 订单金额较去年涨幅(%) 距上次下单天数 \\
    1408 3 Female 4.0 7.0 11.0 9.0
    1433 4 Male 4.0 10.0 19.0 8.0
    1536 3 Female 4.0 1.0 16.0 3.0
    2815 4 Female 4.0 2.0 12.0 6.0
    2816 5 Male 4.0 2.0 16.0 1.0
    … … … … … … …
    5617 4 Female 4.0 2.0 15.0 3.0
    5618 6 Female 4.0 2.0 13.0 2.0
    5620 5 Female 4.0 2.0 15.0 5.0
    5623 4 Male 4.0 2.0 20.0 NaN
    5628 5 Male 4.0 2.0 15.0 9.0

    偏好订单品类 关注主播数量 满意度评分 投诉标识 优惠券使用次数 优惠金额(元)
    1408 Fashion 8 5 0 6.0 176.37
    1433 Laptop & Accessory 2 1 0 3.0 141.52
    1536 Household 2 4 0 0.0 122.79
    2815 Laptop & Accessory 10 2 1 2.0 184.93
    2816 Mobile Phone 8 3 1 1.0 145.90
    … … … … … … …
    5617 Mobile Phone 4 3 0 1.0 145.01
    5618 Mobile Phone 3 1 0 2.0 154.77
    5620 Mobile Phone 3 5 0 1.0 162.85
    5623 Laptop & Accessory 2 5 0 2.0 224.36
    5628 Laptop & Accessory 4 4 0 2.0 178.90

    [1179 rows x 19 columns]

    iloc 根据物理位置查询

    print(type(data.iloc[1]))
    print(data.iloc[1])

    <class 'pandas.core.series.Series'>
    客户编号 50002
    客户流失标识 1
    客户在网时长(月) NaN
    首选登录设备 Phone
    城市等级 1
    仓库到住宅距离(公里) 8.0
    婚姻状况 Single
    年龄分组 4
    性别 Male
    APP使用时长(小时/天) 3.0
    下单次数 1.0
    订单金额较去年涨幅(%) 15.0
    距上次下单天数 0.0
    偏好订单品类 Household
    关注主播数量 7
    满意度评分 3
    投诉标识 1
    优惠券使用次数 0.0
    优惠金额(元) 120.9
    Name: 1, dtype: object

    print(data.iloc[0:2])

    客户编号 客户流失标识 客户在网时长(月) 首选登录设备 城市等级 仓库到住宅距离(公里) 婚姻状况 年龄分组 \\
    0 50001 1 4.0 Mobile Phone 3 6.0 Single 3
    1 50002 1 NaN Phone 1 8.0 Single 4

    性别 APP使用时长(小时/天) 下单次数 订单金额较去年涨幅(%) 距上次下单天数 偏好订单品类 \\
    0 Female 3.0 1.0 11.0 5.0 Laptop & Accessory
    1 Male 3.0 1.0 15.0 0.0 Household

    关注主播数量 满意度评分 投诉标识 优惠券使用次数 优惠金额(元)
    0 9 2 1 1.0 159.93
    1 7 3 1 0.0 120.90

    print(data.iloc[:3])

    客户编号 客户流失标识 客户在网时长(月) 首选登录设备 城市等级 仓库到住宅距离(公里) 婚姻状况 年龄分组 \\
    0 50001 1 4.0 Mobile Phone 3 6.0 Single 3
    1 50002 1 NaN Phone 1 8.0 Single 4
    2 50003 1 NaN Phone 1 30.0 Single 4

    性别 APP使用时长(小时/天) 下单次数 订单金额较去年涨幅(%) 距上次下单天数 偏好订单品类 \\
    0 Female 3.0 1.0 11.0 5.0 Laptop & Accessory
    1 Male 3.0 1.0 15.0 0.0 Household
    2 Male 2.0 1.0 14.0 3.0 Household

    关注主播数量 满意度评分 投诉标识 优惠券使用次数 优惠金额(元)
    0 9 2 1 1.0 159.93
    1 7 3 1 0.0 120.90
    2 6 3 1 0.0 120.28

    iloc[i,j] 坐标

    loc[ ,‘’] 标签(索引,列名)

    print(data.iloc[1,2])
    # print(data.loc[1,2])# 报错
    print(data.loc[1,'城市等级'])

    nan
    1

    # 查看“APP使用时长(小时/天)”大于3的布尔索引的类型
    print(type((data["APP使用时长(小时/天)"] > 3).values))
    # 打印布尔索引数组
    print((data["APP使用时长(小时/天)"] > 3).values)
    # 使用布尔索引过滤出APP使用时长大于3的行
    print(data.iloc[(data["APP使用时长(小时/天)"] > 3).values])

    <class 'numpy.ndarray'>
    [False False False … False True False]
    客户编号 客户流失标识 客户在网时长(月) 首选登录设备 城市等级 仓库到住宅距离(公里) 婚姻状况 \\
    1408 51409 0 33.0 Mobile Phone 3 31.0 Single
    1433 51434 0 3.0 Phone 1 8.0 Married
    1536 51537 0 NaN Phone 1 15.0 Single
    2815 52816 1 5.0 Mobile Phone 3 7.0 Single
    2816 52817 1 1.0 Phone 1 9.0 Single
    … … … … … … … …
    5617 55618 0 14.0 Phone 1 9.0 Married
    5618 55619 0 9.0 Mobile Phone 1 8.0 Married
    5620 55621 0 3.0 Mobile Phone 1 35.0 Single
    5623 55624 0 5.0 Pad 1 12.0 Single
    5628 55629 0 23.0 Pad 3 9.0 Married

    年龄分组 性别 APP使用时长(小时/天) 下单次数 订单金额较去年涨幅(%) 距上次下单天数 \\
    1408 3 Female 4.0 7.0 11.0 9.0
    1433 4 Male 4.0 10.0 19.0 8.0
    1536 3 Female 4.0 1.0 16.0 3.0
    2815 4 Female 4.0 2.0 12.0 6.0
    2816 5 Male 4.0 2.0 16.0 1.0
    … … … … … … …
    5617 4 Female 4.0 2.0 15.0 3.0
    5618 6 Female 4.0 2.0 13.0 2.0
    5620 5 Female 4.0 2.0 15.0 5.0
    5623 4 Male 4.0 2.0 20.0 NaN
    5628 5 Male 4.0 2.0 15.0 9.0

    偏好订单品类 关注主播数量 满意度评分 投诉标识 优惠券使用次数 优惠金额(元)
    1408 Fashion 8 5 0 6.0 176.37
    1433 Laptop & Accessory 2 1 0 3.0 141.52
    1536 Household 2 4 0 0.0 122.79
    2815 Laptop & Accessory 10 2 1 2.0 184.93
    2816 Mobile Phone 8 3 1 1.0 145.90
    … … … … … … …
    5617 Mobile Phone 4 3 0 1.0 145.01
    5618 Mobile Phone 3 1 0 2.0 154.77
    5620 Mobile Phone 3 5 0 1.0 162.85
    5623 Laptop & Accessory 2 5 0 2.0 224.36
    5628 Laptop & Accessory 4 4 0 2.0 178.90

    [1179 rows x 19 columns]

    print(data['客户流失标识'])

    0 1
    1 1
    2 1
    3 1
    4 1
    ..
    5625 0
    5626 0
    5627 0
    5628 0
    5629 0
    Name: 客户流失标识, Length: 5630, dtype: int64

    from mapping import CHURN_MAPPING
    data['客户流失标识'] = data['客户流失标识'].map(CHURN_MAPPING) # 根据字典,替换数据
    print(data['客户流失标识'])

    0 流失
    1 流失
    2 流失
    3 流失
    4 流失
    …
    5625 未流失
    5626 未流失
    5627 未流失
    5628 未流失
    5629 未流失
    Name: 客户流失标识, Length: 5630, dtype: object

    from mapping import DEVICE_MAPPING, MARITAL_STATUS_MAPPING, CITYTIER_MAPPING, AGEGROUP_MAPPING, GENDER_MAPPING, PREFEREDORDERCAT_MAPPING, COMPLAIN_MAPPING
    data['首选登录设备'] = data['首选登录设备'].map(DEVICE_MAPPING)
    data['婚姻状况'] = data['婚姻状况'].map(MARITAL_STATUS_MAPPING)
    data['年龄分组'] = data['年龄分组'].map(AGEGROUP_MAPPING)
    data['性别'] = data['性别'].map(GENDER_MAPPING)
    data['投诉标识'] = data['投诉标识'].map(COMPLAIN_MAPPING)
    data['城市等级'] = data['城市等级'].map(CITYTIER_MAPPING)
    data['偏好订单品类'] = data['偏好订单品类'].map(PREFEREDORDERCAT_MAPPING)

    print(data['首选登录设备'])

    0 手机
    1 电话
    2 电话
    3 电话
    4 电话
    …
    5625 平板电脑
    5626 手机
    5627 手机
    5628 平板电脑
    5629 手机
    Name: 首选登录设备, Length: 5630, dtype: object

    for c in data.columns:
    print(f'=== {c} ===')
    print(data[c].unique()) # 查看一列的所有取值
    if data[c].isna().any(): # 是否存在空值
    print(f'=== {c} === 存在空值')
    print(f'空值数量:=== {data[c].isna().sum()} ===') # 空值数量

    === 客户编号 ===
    [50001 50002 50003 … 55628 55629 55630]
    === 客户流失标识 ===
    ['流失' '未流失']
    === 客户在网时长(月) ===
    [ 4. nan 3. 13. 11. 9. 19. 23. 14. 8. 18. 5. 2. 33. 1. 29. 6. 26.
    28. 7. 24. 25. 15. 22. 27. 16. 12. 21. 17. 53. 63. 31. 51. 61.]
    === 客户在网时长(月) === 存在空值
    空值数量:=== 264 ===
    === 首选登录设备 ===
    ['手机' '电话' '平板电脑']
    === 城市等级 ===
    ['三线城市' '一线城市' '二线城市']
    === 仓库到住宅距离(公里) ===
    [ 6. 8. 30. 15. 12. 22. 11. 9. 31. 18. 13. 20. 29. 28.
    26. 14. nan 10. 27. 17. 23. 33. 19. 35. 24. 16. 25. 32.
    34. 5. 21. 126. 7. 36. 127.]
    === 仓库到住宅距离(公里) === 存在空值
    空值数量:=== 251 ===
    === 婚姻状况 ===
    ['单身' '离异' '已婚']
    === 年龄分组 ===
    ['30-39' '40-49' '50-59' '18-29' '未成年' '60及以上']
    === 性别 ===
    ['女性' '男性']
    === APP使用时长(小时/天) ===
    [ 3. 2. nan 1. 0. 4. 5.]
    === APP使用时长(小时/天) === 存在空值
    空值数量:=== 255 ===
    === 下单次数 ===
    [ 1. 6. 2. 15. 4. 7. 3. 9. nan 11. 5. 12. 10. 8. 13. 14. 16.]
    === 下单次数 === 存在空值
    空值数量:=== 258 ===
    === 订单金额较去年涨幅(%) ===
    [11. 15. 14. 23. 22. 16. 12. nan 13. 17. 18. 24. 19. 20. 21. 25. 26.]
    === 订单金额较去年涨幅(%) === 存在空值
    空值数量:=== 265 ===
    === 距上次下单天数 ===
    [ 5. 0. 3. 7. 2. 1. 8. 6. 4. 15. 9. 11. 10. nan 13. 12. 17. 16.
    14. 30. 46. 18. 31.]
    === 距上次下单天数 === 存在空值
    空值数量:=== 307 ===
    === 偏好订单品类 ===
    ['笔记本电脑及配件' '家居用品' '手机' '其他品类' '服饰类' '食品杂货']
    === 关注主播数量 ===
    [ 9 7 6 8 3 2 4 10 1 5 19 21 11 20 22]
    === 满意度评分 ===
    [2 3 5 4 1]
    === 投诉标识 ===
    ['投诉' '未投诉']
    === 优惠券使用次数 ===
    [ 1. 0. 4. 2. 9. 6. 11. nan 7. 12. 10. 5. 3. 13. 15. 8. 14. 16.]
    === 优惠券使用次数 === 存在空值
    空值数量:=== 256 ===
    === 优惠金额(元) ===
    [159.93 120.9 120.28 … 173.77 287.91 173.78]

    data['首选登录设备'].isna().any()

    np.False_

    t = 'Complain'.upper()
    print(t)

    COMPLAIN

    data['城市等级'].unique()

    array(['三线城市', '一线城市', '二线城市'], dtype=object)

    data.to_csv('电商行为数据.csv',index=False)

    赞(0)
    未经允许不得转载:171主机测评 » 【pandas】查看数据、更改列名
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址