【Python学习笔记】Python近期总结

python使用总结

pandas库的使用

python 复制代码
import pandas as pd
读取csv文件
python 复制代码
df = pd.read_csv("路径名",header,low_memory=False)
for循环遍历指定范围(左闭右开)
python 复制代码
for i in range(1,50):
    column = 'column' + str(i)
    
# 求出最小值并取三位小数
min = df[['column' + str(i) for i in range(1,50)]].min(axis=1).round(3)
df.shape

返回一个元组,包括DataFrame对象的行数和列数

df.shape[1],返回DataFrame对象的列数

df.shape[0],返回DataFrame对象的行数

python 复制代码
shape = df.shape
print(shape) # (500,40)表示500行40列
shape1 = df.shape[1]
print(shape1)# 40列
行列取值操作

抽取列及合并想要的两种类型的列

python 复制代码
duplicate_column = ["语文","数学","英语","物理","化学","生物"]
special_columns = df[duplicate_column]
common_columns = df.iloc[:, 27:147]
df = pd.concat([special_columns, common_columns], axis=1)
删除行列操作

语法:DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

  • labels:一个字符或者一个数值,加上axis,表示label标识的行或者列

  • index:DataFrame中的index

  • axis:axis=0表示行,axis=1表示列

  • columns:列名

  • inplace:True表示删除某行某列后原DataFrame变化,False不改变原始DataFrame,默认为False

示例:

python 复制代码
# 删除不需要的列
drop_columns_list = ["a","b","c","d","e"]
dataframe.drop(columns=drop_columns_list, inplace=True)
DataFrame.query()

语法:DataFrame.query(expr, inplace=False, **kwargs)

示例:

python 复制代码
selected_df = csv_df[(csv_df["real_time"] >= start_time) & (csv_df["real_time"] <= end_time)]
# 使用query()优化后的代码
charge_df = dataframe.query(f"real_time >= '{start_time}' and real_time <= '{end_time}'")
DataFrame.rename()和DataFrame.replace()

语法:DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=None, inplace=False, level=None, errors='ignore')

语法:DataFrame.replace(to_replace=None,value=_NoDefault.no_default,inplace=False, limit=None,regex=False,method=_NoDefault.no_default)

示例:

python 复制代码
# rename用法1 :
update_columns_df = df.rename(columns={"math": "m", "english":"e","chinese": "ch", "history":"h", "class": "cl"})
# rename用法2 :
single_columns = {col: col.replace('voltage_', 'volt_').replace('temperature_', 'temp_') for col in update_columns_df.columns}
charge_update_columns_df.rename(columns=single_columns, inplace=True)
输出为csv文件

pandas.DataFrame.to_csv

python 复制代码
DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression='infer', quoting=None, quotechar='"', lineterminator=None, chunksize=None, date_format=None, doublequote=True, escapechar=None, decimal='.', errors='strict', storage_options=None)

常用参数介绍:

  • path_or_buf:str, path object, file-like object, or None, default None

    • 字符串,路径对象(实现os.PathLike[str]),或实现write()函数的类文件对象。如果为None,结果将作为字符串返回。如果传递了非二进制文件对象,则应该使用newline= "打开它,禁用通用换行符。如果传入二进制文件对象,mode可能需要包含' b '。
  • sep:str, default ','

    • 长度为1的字符串,输出文件的字段分隔符。
  • na_rep:str, default ''

    • 用于替换空值的。
  • float_format:str, Callable, default None

    • 浮点数的格式字符串。如果给出了Callable,则它优先于其他数字格式参数,如decimal。
      • %.2f:保留两位小数
      • %f:原始浮点数格式(不进行任何格式化)
      • %.4f:保留四位小数
      • %.2e:使用科学计数法,并保留两位小数
      • %.0f:四舍五入到整数
  • columns:sequence, optional

    • 指定将要写入文件中的列。
  • header:bool or list of str, default True

    • 是否将列名写入文件,如果给出一个字符串列表,则假定它是列名的别名。
  • index:bool, default True

    • 写行名(索引)。
  • mode:{'w', 'x', 'a'}, default 'w'

    • 文件的打开模式
      • 'w', 且先把文件内容清空 /以只写模式打开文件。
      • 'x', 独占创建,如果文件已存在则失败。
      • 'a', 如果存在,则追加到文件末尾。
  • encoding:str, optional

    • 表示要在输出文件中使用的编码的字符串,默认为' utf-8 '。如果path_or_buf是非二进制文件对象,则不支持编码。
python 复制代码
df.to_csv(output_file,index=False,encoding='utf-8')

日期时间库的使用

日期格式转化

strptime将一个格式化时间字符串转化为datetime时间对象。字符串 => 日期时间对象

strftime将给定格式的日期对象转换为字符串。日期时间对象 => 字符串

python 复制代码
from datetime import datetime

datetime.strptime(字符串,时间格式)
datetime.strftime()

timedelta()函数表示datetime对象之间的时间间隔timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

python 复制代码
from datetime import datetime,timedelta

time = "2023-10-31"
new_time = dateime.strptime(time,"%Y-%m-%d")
print(new_time) # 2023-10-31 00:00:00 
delete = timedelta(days=1)
print(new_time - delete) # 2023-10-30 00:00:00
时间戳格式的转化
  • 时间戳:Unix 时间戳是指从 1970 年 1 月 1 日开始至今的秒数。通常用于在计算机系统、网络应用和数据传输中记录和计算时间。
  • time.localtime():Python 的 time 模块提供了 time.localtime() 方法,它用于将当前时间戳转换为本地时间的 struct_time 对象。struct_time 对象包括年、月、日、小时、分钟、秒、一周的第几天、一年的第几天、是否是夏时令(0表示否,1表示是),可以通过属性名或索引来获取。
  • 时间戳转日期格式:通过时间戳和 time.localtime() 方法,我们可以将 Unix 时间戳转换为易读的日期和时间格式。Python 的 time 模块还提供了 time.strftime() 函数,它允许我们通过自定义格式将 struct_time 对象格式化为字符串。该函数接受一个格式化字符串作为参数,并将 struct_time 对象转换为符合格式化字符串指定格式的字符串。

示例:将 Unix 时间戳(秒级时间戳)转换为可读的日期和时间格式:

python 复制代码
import time

# 获取当前时间戳 
timestamp = time.time()

# 将时间戳转换为 struct_time 对象
local_time = time.localtime(timestamp)

# 格式化 struct_time 对象为字符串
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time)

print(timestamp)
print(local_time)
print(formatted_time)
python 复制代码
1701152915.4056435
time.struct_time(tm_year=2023, tm_mon=11, tm_mday=28, tm_hour=14, tm_min=28, tm_sec=35, tm_wday=1, tm_yday=332, tm_isdst=0)
2023-11-28 14:28:35

该示例输出的日期格式为 YYYY-MM-DD HH:MM:SS,其中 YYYY、MM 和 DD 分别表示年、月和日,HH、MM 和 SS 分别表示时、分和秒。

示例:毫秒级时间戳转换

python 复制代码
import time 

now = int(1700928100000/1000)
timeArray = time.localtime(now)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S",timeArray)
print(timeArray)
print(otherStyleTime)
python 复制代码
time.struct_time(tm_year=2023, tm_mon=11, tm_mday=26, tm_hour=0, tm_min=1, tm_sec=40, tm_wday=6, tm_yday=330, tm_isdst=0)
2023-11-26 00:01:40

os库的使用

python 复制代码
import os
os.listdir(path)
  • 此方法返回一个列表,其中包含由指定的绝对路径目录下的所有文件夹和文件的名称。

  • 它不会返回此目录下文件夹的下一级目录下的内容。

我们要读取路径为 C:\Users\xiaoming\Desktop 的目录。由于该路径包含转义字符 \,在使用时需要进行转义,即写成 C:\\Users\\xiaoming\\Desktop。然而,当文件路径很长或者包含大量转义字符时,手动进行转义可能会非常麻烦,因此我们可以使用以r或者R作为前缀来忽略所有转义字符。

示例:

python 复制代码
raw_path1 = r"C:\Users\xiaoming\Desktop"
raw_path2 = "C:\\Users\\xiaoming\\Desktop"
file_name_list1 = os.listdir(raw_path1)
print(file_name_list1)
os.path.join(path1,path2,path3,...)
  • 此方法用来拼接文件路径,path1为初始路径,path2、path3、...为需要拼接在其后的路径,可以依次拼接多个路径。

示例:

python 复制代码
raw_path1 = r"C:\Users\kanglei\Desktop"
file_name_list1 = os.listdir(raw_path1)
for file in file_name_list1:
    file_path1 = os.path.join(raw_path1,file)
    print(file_path1)
raw_path2 = "C:\\Users\\kanglei\\Desktop"
file_name_list2 = os.listdir(raw_path2)
for file in file_name_list2:
    file_path2 = os.path.join(raw_path2,file)
    print(file_path2)
os.path.getsize
  • os.path.getsize用于获取文件的大小(以字节为单位)。传入文件的路径作为参数,函数将返回文件的大小。

示例:

python 复制代码
file_path = "file.txt"
file_size = os.path.getsize(file_path)
print("文件大小为:", file_size, "字节")
os.path.split(path)

os.path.split(path) 是 Python 的 os.path 模块中的一个函数,用于将路径分割成目录路径和文件名部分。

下面是对 os.path.split(path) 函数的详细解释:

  • path 是一个字符串,表示一个文件的路径。
  • 函数会将路径中的目录部分和文件名部分分别进行分割,并以元组的形式返回结果。
  • 元组的第一个元素是目录路径,第二个元素是文件名。
  • 如果路径中只包含文件名而没有目录部分,目录路径部分将为空字符串。
  • 如果路径以斜杠 / 结尾,则表示路径为目录路径,文件名部分将为空字符串。

示例:

python 复制代码
import os

path = '/home/user/documents/example.txt'
dirname, filename = os.path.split(path)

print(f'Directory Path: {dirname}') # Directory Path: /home/user/documents
print(f'File Name: {filename}') # File Name: example.txt

json库的使用

定义了一个json文件名为data1.json

json 复制代码
{
    "aaa": [
        {
            "id": 0,
            "time1": "2023-09-01T00:00:00",
            "time1_row": 0,
            "time2": "2023-09-01T15:06:45",
            "time2_row": 3333 
        },
        {
            "id": 2,
            "time1": "2023-09-01T15:07:00",
            "time1_row": 3333,
            "time2": "2023-09-01T17:30:00",
            "time2_row": 4444
        }
    ],
    "bbb": [
        {
            "id": 0,
            "time1": "2023-09-01T00:00:00",
            "time1_row": 0,
            "time2": "2023-09-01T15:06:45",
            "time2_row": 3333 
        },
        {
            "id": 2,
            "time1": "2023-09-01T15:07:00",
            "time1_row": 3333,
            "time2": "2023-09-01T17:30:00",
            "time2_row": 4444
        }
    ],
    "ccc": [
        {
           "id": 0,
            "time1": "2023-09-01T00:00:00",
            "time1_row": 0,
            "time2": "2023-09-01T15:06:45",
            "time2_row": 3333 
        },
        {
            "id": 2,
            "time1": "2023-09-01T15:07:00",
            "time1_row": 3333,
            "time2": "2023-09-01T17:30:00",
            "time2_row": 4444
        }
    ],
    "ddd": 123.123456789
}
读取json文件
python 复制代码
import json
with open("./data1.json","r") as file:
    json_data = json.load(file)

从目录下的data1.json文件中读入json数据,通过json.load方法将读入的json文本转换为Python中的字典存到json_data变量中。

获取json key
python 复制代码
# 获取键
keys = json_data.keys()
# 遍历keys
for key in keys:
    print(key)
# 判断某个键是否存在于json数据中
if "key_name" not in json_data.keys():
    return False
# 获取json中某一个变量具体的值
start_time = json_data["charge_segs"][0]["time1"].replace("T"," ")
end_time = json_data["charge_segs"][0]["time2"].replace("T"," ")

python基础操作

关于列表的操作
python 复制代码
# 新建空列表
csv_file = []
json_file = []
result = list()
# 向列表中添加数据
for file in file_path:
    file_type = file.split(".")[1]
    if file_type == "csv":
        csv_file.append(file)
    elif file_type == "json":
        json_file.append(file)
# 排序列表
## sorted(iterable, /, *, key=None, reverse=False)
## iterable:待排序的序列
## key:排序规则
## reverse:指定排序的方式,默认值False,即升序排列
sorted_csv_file = sorted(csv_file)
sorted_json_file = sorted(json_file)
# 添加列表 extend() 可以在列表末尾添加另一个序列中的值。
# 语法:list.extend(iterable) iterable:需要添加的元素列表
change_columns_list = [f"class_{i}" for i in range(1, 31)]
change_columns_list.extend(["grade", "math_score", "english_score", "history_score", "chinese_score"])
# 
startswith()和endswith()的用法

startswith()用来检查字符串是否以指定字符串开头,如果是则返回True,否则返回False

语法:str.startswith(str, beg=0,end=len(string))

str为要检测的字符串,beg、end为可选参数用于设置字符串检测的起始结束位置

endswith()用来检查字符串是否以指定字符串结尾,常用于判断文件类型

语法与startswith类似

zip()函数
python字符串操作
json 复制代码
data = "2023-11-11 13:45:21.579   abc/defg/hijk/lm/nopq:[{"values":[[2020,0,123456],[2021,0,123456],[2022,0,123456],[2023,0,123456]],"name":"GERTSAN3USIAJH/abc","age":"20","idName":"GERTSAN3USI","inclusion":"0x03FE070000000000000000000000000000000000000000000000","ts":"2023-11-11 18:37:36"}]"

find() - 在字符串中搜索指定的值并返回它被找到的位置 - 返回的是要找的值中第一个字符的位置

python 复制代码
time = data[0:data.find("   ")] 
print(f'time={time}')# 2023-11-11 13:45:21.579
python读取json文件
  • JSON (JavaScript Object Notation) 是一种用于数据交换的轻量级格式。json.load()是python中用于加载JSON数据的函数。它接收一个文件对象作为参数,并将文件中的JSON数据解析为Python对象。

示例:

python 复制代码
import json

# 打开 JSON 文件
with open('data.json') as file:
    # 加载 JSON 数据
    data = json.load(file)

上述代码中,我们首先使用 open() 函数打开一个 JSON 文件,并将其分配给一个文件对象 file。接着,我们使用 json.load() 函数将 file 中的 JSON 数据解析为 Python 对象,并将结果保存在变量 data 中。

当数据加载完成后,可以根据数据的结构和需求来处理 data。可以使用 Python 的数据处理和操作技术,如字典和列表的访问、遍历和修改等。除了加载本地 JSON 文件,json.load() 函数还可以加载字符串形式的 JSON 数据,只需将 JSON 字符串传递给该函数即可。

  • loadloads 的区别。

    • loads 函数是用于将一个 JSON 字符串解码为 Python 对象。它将一个字符串参数作为输入,并返回一个对应的 Python 数据结构。例如:
    python 复制代码
    import json
    
    json_str = '{"name": "Alice", "age": 30}'
    data = json.loads(json_str)
    
    print(data["name"])  # 输出 "Alice"
    print(data["age"])   # 输出 30
    • load 函数与 loads 函数非常相似,不同之处在于 load 函数可以从打开的文件中读取 JSON 数据,而不是从字符串中读取。例如:
    python 复制代码
    import json
    
    with open('data.json') as f:
        data = json.load(f)
    
    print(data["name"])  # 输出 "Alice"
    print(data["age"])   # 输出 30
  • 因此,loadsload 函数的区别在于其输入来源不同,一个来自于一个 JSON 字符串,另一个来自于已经打开的文件对象。

关于字典的操作
python 复制代码
#字典的定义
info = {"name":"Jack","age":20,"sex":"man"}   #使用大括号{},键值存储类型一一对应,键值之间用冒号相连接

#字典的访问
print(info["name"]) # Jack
print(info["age"]) # 20

#访问不存在的键
#print(info["gender"])   #直接访问,没有找到相应的键,会报错

print(info.get("gender"))   #使用get方法,没有找到相应的键,默认返回:None
print(info.get("gender","m"))#没有找到,可以设定返回默认值
print(info.get("age","20"))
print(info.get("age","18"))

tqdm进度条

python 复制代码
from tqdm import tqdm
for file in tqdm(os.listdir(file_dir)):
    print(f'文件名为:{file}')

运行代码,就会看到一个动态的进度条。会显示出来还有多少项需要处理、预计剩余时间、当前的处理速度

48%|█████     | 11/23 [12:58<13:08, 65.69s/it]

python的内置属性和变量名

__init__, __name__, __main__

__init__, __name__, __main__ 是 Python 中一些特殊的内置属性和变量名。

  • __init__ 是一个特殊的方法,用于在创建一个对象时进行初始化操作。它是在类的实例被创建时调用的构造函数。通过定义 __init__ 方法,可以设置对象的初始状态和属性。
  • __name__ 是一个内置变量,用于表示当前模块(文件)的名称。当一个模块被直接运行时,其 __name__ 属性的值为 "__main__"。而当一个模块被导入到其他模块中时,__name__ 的值为模块的名称。
  • __main__ 是一个特殊的顶级执行上下文,用于表示当前脚本(模块)正在被直接执行,而不是被导入到其他脚本中。当一个脚本被直接执行时,Python 解释器将会将该脚本中的代码当作主程序来执行,并将 __name__ 的值设置为 "__main__"。这样,我们可以在脚本中编写一些仅在脚本被直接执行时执行的特定操作,而这些操作在导入该脚本时不会执行。

假设我们有两个文件:main.pymy_module.py

main.py

python 复制代码
import my_module

print("This is the main program.")

obj = my_module.MyClass()

my_module.py

python 复制代码
class MyClass:
    def __init__(self):
        print("This is MyClass's __init__ method.")

    def print_value(self):
        print("This is MyClass's print_value method.")

print("This is my_module.py.")
print("__name__ value:", __name__)

当我们运行 main.py 时,输出如下:

sh 复制代码
This is my_module.py.
__name__ value: my_module
This is the main program.
This is MyClass's __init__ method.

让我们分析一下发生了什么:

  1. 当我们导入 my_module 模块时,在 my_module.py 中的代码会被执行,输出了一些内容。
  2. 由于导入模块并不会直接执行模块中的最顶层代码(只有在导入时才会执行),所以 main.py 中的 "This is the main program." 输出排在 my_module.py 中的内容之后。
  3. 紧接着,我们在 main.py 中创建了 my_module.MyClass 的实例,会触发 MyClass 类的 __init__ 方法,并输出 "This is MyClass's init method."。

关键点在于 __name__ 的值。当我们直接运行 my_module.py 时,它的 __name__ 值为 "__main__",而当 my_module.py 被导入为模块时,__name__ 值为模块的名称(在这个例子中是 "my_module")。

因此,在 main.py 中导入 my_module 时,my_module.py 的顶层代码会被执行,并输出相应的内容。但 MyClass 类的实例创建和方法调用部分(obj = my_module.MyClass())只会在我们直接运行 main.py 时才会执行,而在导入 my_module 时不会执行。

self

在Python中,self 是一个约定俗成的名字,用于表示对象自身。它是一个形式参数,在方法中用于引用当前对象的实例。

当定义一个类的方法时,第一个参数通常被命名为self,以表示对当前实例的引用。在方法调用时,不需要显式地传入self参数,Python会自动为方法添加当前对象的实例作为第一个参数。

使用self 参数可以访问和操作当前对象的属性和方法。通过将属性和方法与self关联,我们可以在类的不同方法之间共享数据,并操作对象自身的状态。

下面是一个例子,展示了self的使用:

python 复制代码
class MyClass:
    def __init__(self, value):
        self.value = value

    def some_method(self):
        print("The value is:", self.value)

    def modify_value(self, new_value):
        self.value = new_value

obj = MyClass(10)
obj.some_method()  # 输出: The value is: 10

obj.modify_value(20)
obj.some_method()  # 输出: The value is: 20

在上述代码中,self 用于引用 MyClass 类的实例,并与实例的属性 value 和方法 some_method 关联。在 some_method 中,我们可以通过 self.value 访问和操作 MyClass 实例的 value 属性。在 modify_value 中,我们通过 self.value 更新了实例的 value 属性。

总之,self 在Python类中是一个特殊的参数,用于引用当前对象的实例,并访问和操作对象的属性和方法。

远程服务器jupyter本地访问

sh 复制代码
tmux info # 列出当前所有tmux会话的信息
tmux new -s <name> # 启动命名tmux
tmux attach -t notebook # 重新连接会话 使用伪窗口名称
jupyter lab --no-browser --port=1000 --ip=0.0.0.0 # 远程服务器jupyter本地访问开启端口
alg006.abc.def:1000 # jupyter访问路径

conda小环境的基本使用

sh 复制代码
conda -V # 查看conda版本
conda create -n aa # 创建一个小环境
conda create -n bb python=3.10 # 创建一个python版本为3.10的小环境
conda info -e # 查看已存在的小环境名称
conda activate bb # 启动激活已有的小环境
conda deactivate # 退出小环境
相关推荐
codebolt3 分钟前
ADS学习记录
学习
Komorebi.py1 小时前
【Linux】-学习笔记05
linux·笔记·学习
不去幼儿园1 小时前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
亦枫Leonlew1 小时前
微积分复习笔记 Calculus Volume 1 - 6.5 Physical Applications
笔记·数学·微积分
幽兰的天空2 小时前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
网易独家音乐人Mike Zhou6 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书6 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
冰帝海岸6 小时前
01-spring security认证笔记
java·笔记·spring
小二·7 小时前
java基础面试题笔记(基础篇)
java·笔记·python
朝九晚五ฺ9 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习