• Python之pandas库--基础


    创建新的工作簿

     

    1. import pandas as pd
    2. file_path = r"C:\Users\YGJ ing7\Desktop\pandas.xlsx"
    3. data = pd.DataFrame()
    4. data.to_excel(file_path)
    5. print("make a new file!")

    新建工作簿同时写入数据

    1. data = pd.DataFrame({'id':[1, 2, 3], "name": ['关羽', '刘备', '张飞']})
    2. print(data)
    3. --------结果--------
    4. id name
    5. 0 1 关羽
    6. 1 2 刘备
    7. 2 3 张飞

    设置索引

    data.set_index('id')

    读取数据

    1. import pandas as pd
    2. file_path = r"C:\Users\admin\Desktop\1.txt"
    3. data = pd.read_csv(file_path)
    4. # 取一行数据
    5. print(data.head(1))
    6. # 查看数据的形状,返回(行数、列数)
    7. print(data.shape)
    8. # 查看列名列表
    9. print(data.columns)
    10. # 查看索引列
    11. print(data.index)
    12. # 查看每一列数据类型
    13. 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文件

    1. import pandas as pd
    2. file_path = r"C:\Users\admin\Desktop\1.txt"
    3. data = pd.read_csv(file_path, header=None, names=['性别', '姓名', '年龄', '手机号', '住址', '入职日期'])
    4. data.to_csv(r"C:\Users\admin\Desktop\1.csv", encoding='gbk')

    读取数据库内容

    1. import pandas as pd
    2. import pymysql
    3. db = pymysql.connect(host="127.0.0.1", user="root", password="12**56", database="task01", charset="utf8", port=3306)
    4. data = pd.read_sql('select * from table_a', con=db, )
    5. print(data)

    pandas数据结构

    Series序列,一维数组表示一行或一列数据

    1. import pandas as pd
    2. data = pd.Series(['loa', 'jia', 'iqo', 'kms', 'neh', 'ncjx', 'mkd'])
    3. print(data)
    4. print(data.index)
    5. print(data.values)

    DataFrame用法

    1,传入二维列表格式,columns表示列字段, 执行如下代码: 

    1. import pandas as pd
    2. data=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],columns=['a','b','c'])
    3. --------结果--------
    4.    a  b  c
    5. 0  1  2  3
    6. 1  4  5  6
    7. 2  7  8  9

    2, 传入的字典格式数据,

    1. data = pd.DataFrame({'id':[1, 2, 3], "name": ['关羽', '刘备', '张飞']})
    2. print(data)
    3. --------结果--------
    4. id name
    5. 0 1 关羽
    6. 1 2 刘备
    7. 2 3 张飞

    3, DataFrame结构,如何取数据??

    1. print(data['a'][0] ) # 先列后行
    2. print(data.loc[1]['a'] ) # 先行后列
    3. print(data.iloc[1][0] ) # 数字形式 行-列
    4. print(data[['a','b']]) # 取2列数据
    5. --------结果-------
    6. 1
    7. 4
    8. 4
    9. a b
    10. 0 1 2
    11. 1 4 5
    12. 2 7 8

    实现VLOOKUP功能

    第一个表字段通过学号进行匹配,添加一列总分字段

    1. # -*- coding: utf-8 -*-
    2. import pandas as pd
    3. df_sinfo = pd.read_excel(r"C:\Users\admin\Desktop\Vlookup.xlsx", sheet_name="花名册")
    4. print(df_sinfo.head())
    5. df_grade = pd.read_excel(r"C:\Users\admin\Desktop\Vlookup.xlsx", sheet_name="成绩单")
    6. print(df_grade.head())
    7. res = pd.merge(df_sinfo, df_grade.loc[:, ["学号", "总分"]], how="left", on="学号")
    8. print(res)
    9. ---------------------------结果----------------------------
    10. 学号 姓名 班级
    11. 0 1 张三 1
    12. 1 2 李四 1
    13. 2 3 王五 2
    14. 3 4 赵六 2
    15. 4 5 邓七 3
    16. 学号 语文 数学 英语 总分
    17. 0 1 67 77 63 207
    18. 1 2 81 58 65 204
    19. 2 3 89 60 58 207
    20. 3 4 67 61 52 180
    21. 4 5 78 55 51 184
    22. 学号 姓名 班级 总分
    23. 0 1 张三 1207
    24. 1 2 李四 1204
    25. 2 3 王五 2207
    26. 3 4 赵六 2180
    27. 4 5 邓七 3184

    需求:将总分调整顺序,放在第一列??

    实现思路:

    • 复制结果表中的总分列      
    • 将结果表中的总分列删除    res.drop("总分", axis=1)
    • 插入复制的总分列               
    1. total = res["总分"]
    2. res = res.drop("总分", axis=1)
    3. res.insert(0, "总分", total)
    4. print(res)
    5. ---------------------------结果----------------------------
    6. 总分 学号 姓名 班级
    7. 0 207 1 张三 1
    8. 1 204 2 李四 1
    9. 2 207 3 王五 2
    10. 3 180 4 赵六 2
    11. 4 184 5 邓七 3

    需求:将性别这一列数据  “男”全部改为先生,“女”全部改为女士

    解决思路:利用pandas中的map映射方法

    第一种方式:字典映射

    1. import pandas as pd
    2. file_path = r"C:\Users\admin\Desktop\数据.xlsx"
    3. df = pd.read_excel(file_path)
    4. dict_map = {"男": "先生", "女": "女士"}
    5. # df["称呼"] = df["性别"].map(dict_map)
    6. df["性别"] = df["性别"].map(dict_map)
    7. print(df)

    首先创建一个映射:字典格式

    性别字段.map(映射)在赋值给该列,如果想创建一个新的列“称呼”就赋值给新的列

    第二种方式:函数映射

    map()中也可以传入一个函数

    1. def replace_map(x):
    2. if "男" == x:
    3. res = "先生"
    4. else:
    5. res = "女士"
    6. return res
    7. df["称呼"] = df["性别"].map(replace_map)
    8. print(df)

    需求:姓名字段在表1是列,在表2是索引,如何进行连接合并?

     

  • 相关阅读:
    如果让我设计一套,TPS百万级API网关!
    淘宝npm镜像源换新地址
    Git:Git中的分支管理
    List按照对象中某个属性的值切割为多个对象,其他字段值不变,转为新的List
    熊市下的Coinbase:亏损、裁员、股价暴跌
    学习HTML第一天
    使用MASA Blazor开发一个标准的查询表格页
    Vivado_AXI Quad SPI_IP核
    Apache Airflow (十) :SSHOperator及调度远程Shell脚本
    LabVIEW异步和同步通信详细分析及比较
  • 原文地址:https://blog.csdn.net/weixin_44007111/article/details/125697874