import pandas as pd
file_path = r"C:UsersYGJ ing7Desktoppandas.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:UsersadminDesktop1.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文件转化
读取TXT文件,在写入csv文件
import pandas as pd file_path = r"C:UsersadminDesktop1.txt" data = pd.read_csv(file_path, header=None, names=['性别', '姓名', '年龄', '手机号', '住址', '入职日期']) data.to_csv(r"C:UsersadminDesktop1.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)
pandas数据结构
Series序列,一维数组表示一行或一列数据
import pandas as pd data = pd.Series(['loa', 'jia', 'iqo', 'kms', 'neh', 'ncjx', 'mkd']) print(data) print(data.index) print(data.values)DataFrame用法
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实现VLOOKUP功能
第一个表字段通过学号进行匹配,添加一列总分字段
# -*- coding: utf-8 -*- import pandas as pd df_sinfo = pd.read_excel(r"C:UsersadminDesktopVlookup.xlsx", sheet_name="花名册") print(df_sinfo.head()) df_grade = pd.read_excel(r"C:UsersadminDesktopVlookup.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需求:将总分调整顺序,放在第一列??
实现思路:
- 复制结果表中的总分列
- 将结果表中的总分列删除 res.drop("总分", axis=1)
- 插入复制的总分列
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
需求:将性别这一列数据 “男”全部改为先生,“女”全部改为女士
解决思路:利用pandas中的map映射方法
第一种方式:字典映射
import pandas as pd
file_path = r"C:UsersadminDesktop数据.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)



