python使用总结
-
-
- pandas库的使用
- 日期时间库的使用
- os库的使用
- json库的使用
-
- 读取json文件
- [获取json key](#获取json key)
- python基础操作
- tqdm进度条
- python的内置属性和变量名
-
- [`init`, `name`, `main`](#
__init__
,__name__
,__main__
) - self
- [`init`, `name`, `main`](#
- 远程服务器jupyter本地访问
- conda小环境的基本使用
-
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文件
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:四舍五入到整数
- 浮点数的格式字符串。如果给出了Callable,则它优先于其他数字格式参数,如decimal。
-
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 字符串传递给该函数即可。
-
load
和loads
的区别。loads
函数是用于将一个 JSON 字符串解码为 Python 对象。它将一个字符串参数作为输入,并返回一个对应的 Python 数据结构。例如:
pythonimport json json_str = '{"name": "Alice", "age": 30}' data = json.loads(json_str) print(data["name"]) # 输出 "Alice" print(data["age"]) # 输出 30
load
函数与loads
函数非常相似,不同之处在于load
函数可以从打开的文件中读取 JSON 数据,而不是从字符串中读取。例如:
pythonimport json with open('data.json') as f: data = json.load(f) print(data["name"]) # 输出 "Alice" print(data["age"]) # 输出 30
-
因此,
loads
和load
函数的区别在于其输入来源不同,一个来自于一个 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.py
和 my_module.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.
让我们分析一下发生了什么:
- 当我们导入
my_module
模块时,在my_module.py
中的代码会被执行,输出了一些内容。 - 由于导入模块并不会直接执行模块中的最顶层代码(只有在导入时才会执行),所以
main.py
中的 "This is the main program." 输出排在my_module.py
中的内容之后。 - 紧接着,我们在
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 # 退出小环境