Python数据处理
Python 数据处理
1.数据清洗、采样、特征构造
a.Regex处理
原始数据文件 a.csv:
12345678910111213Name,AgeJohn,25Jane,Mike,30Alice,thirtyBob,40wang,56li,84zhang,78liu,21mei,5fu,9zhu,45
re 处理:
12345678910111213141516171819202122232425262728293031import csvimport re# 读取 CSV 文件并清洗数据def clean_data(file_name): cleaned_data = [] unique_rows = set() with open(file_name, 'r') as f: reader = csv.DictReader(f) for row in reader: if row['Name'] and row['Age']: ...
Python基础数据类型
一、Python基础数据类型
1.序列通用操作
a.索引
1234567a = [1,2,3,4]print(a[0])print(a[-1])#倒数第一个元素b = 'slfjsld'print(b[0])print(b[-1])
运行结果:
123414sd
b.分片
1234567print(a[1:3])print(b[3:-1]) #前闭后开print(a[::2]) #第二个:后表示步长print(b[6:2:-2]) #步长可以为负,表示从右往左取
运行结果:
1234[2, 3]jsl[1, 3]ds
c.列表相加
12345c = [5,6,7]print(a+c)d = 'hello'print(d+b) #注意同一类型的数据才可以相加
运行结果:
12[1, 2, 3, 4, 5, 6, 7]helloslfjsld
d.乘
1print(3*a)
运行结果:
1[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
e. in
1print(4 in a)
运行结果:
1T ...
数据结构--06二叉树
第六节、二叉树
什么是二叉树?
二叉树是一种树状结构,它由节点和边组成。每个节点最多有两个子节点,分别称为左子节点和右子节点。一个节点没有子节点的情况称为叶节点。
二叉树的基本操作
在C语言中,我们可以使用结构体来定义二叉树节点:
12345struct Node { int data; struct Node* left; struct Node* right;};
这个结构体定义了一个二叉树节点,它有一个整数数据域和两个指针域,分别指向左子节点和右子节点。
插入节点
二叉树的插入操作通常用递归实现。我们从根节点开始,如果当前节点为空,就把新节点插入到当前位置,否则就比较新节点和当前节点的大小,如果新节点小于当前节点,就递归插入到当前节点的左子树,否则递归插入到当前节点的右子树。
123456789101112131415struct Node* insert(struct Node* root, int data) { if (root == NULL) { struct Node* new_node = ...
数据结构--04堆栈
第四节、堆栈
1.数组形式堆栈的实现
(1)堆栈的定义以及结构体
堆栈可以理解为先入后出,一端进一端出。它的结构体为:
1234567#define MAX_SIZE 100 // 栈的最大容量// 定义栈结构typedef struct { int data[MAX_SIZE]; // 存储栈元素的数组 int top; // 栈顶指针,指向栈顶元素} Stack;
(2)队列的基本操作的实现
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 100 // 栈的最大容量// 定义栈结构typedef struct { int data[MAX_SIZE]; // 存储栈元素的数组 int to ...
page
Example_5
任务:跳跃游戏
思路:
使用一个不带头节点的循环单链表,设定一个变量为1,然后通过不断的遍历,来找到第n个节点,然后把这个节点删除。变量置1,重新循环,直到链表中只有一个节点即p->next = p;
代码实现
123456789101112131415161718192021222324252627#include <stdio.h>int main(){ int arr[] = {4,3,1,1,2,1,1}; int k = sizeof(arr)/sizeof(arr[0]); int s = 0; int i = 0,m = 1; int n,T; T = 0; while (i < k) { for (m; m <= arr[i]; m++) { if (arr[i + m] + m > s) { s = arr[i + m] + m; n = m; } } i = i + n; T++; ...
数据结构--03队列
第三节、队列
1.队列的实现
(1)队列的定义以及结构体
队列可以理解为先入先出,一端进一端出。这里使用链表的头进尾出。它的结构体为:
12345typedef struct Line{ Elemtype data; struct Line* next;}*LinkLine;
(2)队列的基本操作的实现
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687#include <stdio.h>#include <corecrt_malloc.h>//队列就是先入先出,一端进一端出。这里使用链表的头进尾出。#define Elemtype inttypedef struct Line{ Elemtype data; struct Line* next;} ...
Demo_C_04
Example_4
任务:约瑟夫环
思路:
使用一个不带头节点的循环单链表,设定一个变量为1,然后通过不断的遍历,来找到第n个节点,然后把这个节点删除。变量置1,重新循环,直到链表中只有一个节点即p->next = p;
代码实现
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113#include <stdio.h>#include <stdlib.h>//约瑟夫环问题:已知 n 个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。// 从编号为 k 的人开始报数,数到 m 的那个人出圈;他的下一个人又从 1 开始报数,数到 m 的那个人又出 ...
数据结构--02链表拓展
第二节、链表拓展
1.双链表
(1)双链表定义与结构
双链表能够解决单链表的单向性的缺点。双链表是指每个节点都有指向其前驱与后继的指针,可以实现双向的操作。
我们可以简单定义它的结构体为:
12345typedef struct Node{ Elemtype data; struct Node *prior,*next;}
(2)双链表的基本操作的实现
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091#include <stdio.h>#include <corecrt_malloc.h>#include <string.h>//双向链表结构体typedef struct Node{ char name[20]; ...
Demo_C_03
Example_3
任务:利用指针把数组逆过来
思路:
实现数组或者是字符串的逆转,思路是一样的,我们可以确定这个数组或者是字符串的长度,然后两个指针分别指向开头与结尾,两个指针交换,然后向中间靠拢,直到所有的完成逆转。
代码实现
1234567891011121314151617181920212223242526272829303132#include <stdio.h>//利用指针来实现数组逆序void invert(int* x, int n) { int* q, * p, temp; q = x; p = q + n - 1; for (int i = 0; i < n / 2; i++) { temp = *(q+i); *(q+i) = *(p - i); *(p - i) = temp; }}int main(){ int a[] = { 1,2,3,4,5,6 }; int n = 6; for (int i = 0; i < n; i++) { p ...
Demo_C_02
Example_2
任务:合并两个升序字符串
思路:
在字符串均未出界的时候,比较大小,小的给第三个字符串。当有一个字符串走完最后一个字符的时候,把另一个字符串跟第三个字符串拼接即可。
代码:
1234567891011121314151617181920212223242526272829303132333435363738394041424344#include <stdio.h>#include <string.h>//两个升序字符串按照升序合并int main(){ char a[20], b[20], c[40], * p; printf("Please input string a:\n"); scanf("%s", &a); printf("Please input string b:\n"); scanf("%s", &b); int i = 0; int k = 0; int j = 0; while (a[i] != ' ...