- import pandas as pd
-
- file_path = r"C:\Users\YGJ ing7\Desktop\pandas.xlsx"
- data = pd.DataFrame()
- data.to_excel(file_path)
- print("make a new file!")
- data = pd.DataFrame({'id':[1, 2, 3], "name": ['关羽', '刘备', '张飞']})
- print(data)
- --------结果--------
- id name
- 0 1 关羽
- 1 2 刘备
- 2 3 张飞
data.set_index('id')

- import pandas as pd
-
- file_path = r"C:\Users\admin\Desktop\1.txt"
- data = pd.read_csv(file_path)
- # 取一行数据
- print(data.head(1))
- # 查看数据的形状,返回(行数、列数)
- print(data.shape)
- # 查看列名列表
- print(data.columns)
- # 查看索引列
- print(data.index)
- # 查看每一列数据类型
- print(data.dtypes)
问题1:不知道为什么我的这个不支持中文名字,执行报错;
问题2:只想要一些数据:head(num) 想要几行写几行;
问题3:reas_csv() 默认逗号分隔,read_table() 添加参数sep='\s+' 匹配\t \n \r等 导入re库;
问题4:读取文件表头设置 headers=None, names=[] 配合使用
data = pd.read_csv(file_path, header=None, names=['性别', '姓名', '年龄', '手机号', '住址', '入职日期'], nrows=3)
读取TXT文件,在写入csv文件
- import pandas as pd
-
- file_path = r"C:\Users\admin\Desktop\1.txt"
- data = pd.read_csv(file_path, header=None, names=['性别', '姓名', '年龄', '手机号', '住址', '入职日期'])
- data.to_csv(r"C:\Users\admin\Desktop\1.csv", encoding='gbk')
- import pandas as pd
- import pymysql
-
- db = pymysql.connect(host="127.0.0.1", user="root", password="12**56", database="task01", charset="utf8", port=3306)
- data = pd.read_sql('select * from table_a', con=db, )
- print(data)
Series序列,一维数组表示一行或一列数据
- import pandas as pd
-
- data = pd.Series(['loa', 'jia', 'iqo', 'kms', 'neh', 'ncjx', 'mkd'])
- print(data)
- print(data.index)
- print(data.values)
1,传入二维列表格式,columns表示列字段, 执行如下代码:
- import pandas as pd
- data=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],columns=['a','b','c'])
- --------结果--------
- a b c
- 0 1 2 3
- 1 4 5 6
- 2 7 8 9
2, 传入的字典格式数据,
- data = pd.DataFrame({'id':[1, 2, 3], "name": ['关羽', '刘备', '张飞']})
- print(data)
- --------结果--------
- id name
- 0 1 关羽
- 1 2 刘备
- 2 3 张飞
3, DataFrame结构,如何取数据??
- print(data['a'][0] ) # 先列后行
- print(data.loc[1]['a'] ) # 先行后列
- print(data.iloc[1][0] ) # 数字形式 行-列
- print(data[['a','b']]) # 取2列数据
- --------结果-------
- 1
- 4
- 4
- a b
- 0 1 2
- 1 4 5
- 2 7 8
第一个表字段通过学号进行匹配,添加一列总分字段
- # -*- coding: utf-8 -*-
- import pandas as pd
-
- df_sinfo = pd.read_excel(r"C:\Users\admin\Desktop\Vlookup.xlsx", sheet_name="花名册")
- print(df_sinfo.head())
- df_grade = pd.read_excel(r"C:\Users\admin\Desktop\Vlookup.xlsx", sheet_name="成绩单")
- print(df_grade.head())
-
- res = pd.merge(df_sinfo, df_grade.loc[:, ["学号", "总分"]], how="left", on="学号")
- print(res)
-
- ---------------------------结果----------------------------
- 学号 姓名 班级
- 0 1 张三 1班
- 1 2 李四 1班
- 2 3 王五 2班
- 3 4 赵六 2班
- 4 5 邓七 3班
- 学号 语文 数学 英语 总分
- 0 1 67 77 63 207
- 1 2 81 58 65 204
- 2 3 89 60 58 207
- 3 4 67 61 52 180
- 4 5 78 55 51 184
- 学号 姓名 班级 总分
- 0 1 张三 1班 207
- 1 2 李四 1班 204
- 2 3 王五 2班 207
- 3 4 赵六 2班 180
- 4 5 邓七 3班 184
实现思路:
- total = res["总分"]
- res = res.drop("总分", axis=1)
- res.insert(0, "总分", total)
- print(res)
- ---------------------------结果----------------------------
- 总分 学号 姓名 班级
- 0 207 1 张三 1班
- 1 204 2 李四 1班
- 2 207 3 王五 2班
- 3 180 4 赵六 2班
- 4 184 5 邓七 3班
解决思路:利用pandas中的map映射方法
第一种方式:字典映射
- import pandas as pd
-
- file_path = r"C:\Users\admin\Desktop\数据.xlsx"
- df = pd.read_excel(file_path)
- dict_map = {"男": "先生", "女": "女士"}
- # df["称呼"] = df["性别"].map(dict_map)
- df["性别"] = df["性别"].map(dict_map)
- print(df)
首先创建一个映射:字典格式
性别字段.map(映射)在赋值给该列,如果想创建一个新的列“称呼”就赋值给新的列
第二种方式:函数映射
map()中也可以传入一个函数
- def replace_map(x):
- if "男" == x:
- res = "先生"
- else:
- res = "女士"
- return res
-
- df["称呼"] = df["性别"].map(replace_map)
- print(df)
