Python案例-Pandas数据处理

Python的Pandas操作,处理常规的数据预处理以及基本的数据变化,在处理超出Excel处理范围的数据时,非常便利。
了解并熟悉常规的操作,其功能,输入数据类型,输入参数,返回的数据类型。
教学: 通过实际的案例处理,掌握案例关键点。以及多次训练以便于达到常规操作可以随手写出。

基本内容

1.涉及的常规操作
 01.数据的Input和Output:  read_csv to_csv
 02.数据查看 head shape
 03.数据去重 drop_duplicates
 04.数据类型变换 astype
 05.时间格式的调整 pandas.to_datetime Series.dt.strftime
 06.联接操作 pandas.merge
 07.分组操作 groupby
2.操作中的输入数据类型,输入参数,输出数据类型

案例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#! /usr/bin
# -*- coding: utf-8 -*-
import pandas as pd

# input data输入数据
gds_bk_book_file = "F:\\data\\input\\book_cd.txt"
gds_bk_sales_file = "F:\\data\\input\\gds_sales_bk.txt"
# 列名称规范 - 如果有列名,则设置为header=None, skiprows=1,同时把规范的名称给出可以跳过指定索引行[0]
# skiprows 需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始
# nrows 需要读取的行数(从文件头开始算起)
book_col_index = ['book_cd', 'l2_book_cd', 'l2_book_des', 'book_local_cd']
sales_col_index = ('id', 'ord_day', 'stu_id', 'book_cd', 'book_pay')
gds_bk_book = pd.read_csv(gds_bk_book_file, sep='\t', names=book_col_index, header=None, skiprows=1)
gds_bk_sales = pd.read_csv(gds_bk_sales_file, sep='\t', names=sales_col_index, header=None, skiprows=1)

# 数据类型的转换-关联的数据类型需要一致
gds_bk_book['book_cd'] = gds_bk_book['book_cd'].astype('str')
gds_bk_sales['book_cd'] = gds_bk_sales['book_cd'].astype('str')

# # 数据转换和去重
unique_mem_data = gds_bk_sales['stu_id'].drop_duplicates()
print("##===查看去重后的stu个数============================")
data_static = unique_mem_data.shape
print("原订单数据" + str(gds_bk_sales.shape))
print("去重后的stu个数" + str(data_static))


# # 关联前确保数据类型一致,object会自动转换,所以,可设置为str等情况
mid_data = pd.merge(gds_bk_sales, gds_bk_book,
            left_on='book_cd',
            right_on='book_cd',
            how='left')
grouped = mid_data.groupby(['stu_id', 'l2_book_cd'])
# 组内计数, 求和, 求均值, 求方差
# print(grouped['book_pay'].sum())
# print(grouped['book_pay'].count())
print("##===查看分组的个数============================")
# 查看分组的个数
# print(len(grouped['book_pay'])) 运行比较慢 
print(grouped['book_pay'].count().shape)

# 时间处理格式-转换为时间类型然后变换时间格式
# pandas.to_datetime
# dt.strftime 需要转换datetime为其他格式 Series.dt.strftime(self, *args, **kwargs) 返回object-即str类型
gds_bk_sales_date_mid = pd.to_datetime(gds_bk_sales['ord_day'], format='%m/%d/%Y')
# 数据集中的时间数据中包含了哪些年、月、日
print("##===数据集中的时间数据中包含了哪些年、月、日========# ")
print(gds_bk_sales_date_mid.dt.year.unique())
print(gds_bk_sales_date_mid.dt.month.unique())
print(gds_bk_sales_date_mid.dt.day.unique())

# 日期的格式转换
gds_bk_sales['ord_day'] = gds_bk_sales_date_mid.dt.strftime('%Y%m%d')

# 数据输出  header=None
out_path = "F:\\data\\output\\book_cd_sale.txt"
print("##===输出文件\n" + out_path)
# gds_bk_sales.to_csv(out_path, sep='\t', index=False, encoding='utf-8', date_format='%Y%m%d')
gds_bk_sales.to_csv(out_path, sep='\t', index=False, encoding='utf-8')

后续

后续的使用,可以增加定义函数 def main():
if __name__ == "__main__":  
    main()
    try异常处理等编程方式

blogroll

social