DataFrame中的dt属性
- 语法:
pd.to_datetime(df['列名'],format="") dt[''].dt.day_name():星期名称dt[''].dt.month_name():月份名称dt[''].dt.date()/dt[''].dt.normalize():返回日期(年月日),前者返回object类型,后者返回datetime64类型dt[''].dt.time:返回时间(时分秒)dt[''].dt.year/month/day/hour/minute/second:返回年、月、日、时、分、秒dt[''].dt.isocalendar():返回三元组(year,week,day)日历,年、一年中的第几周、一周中的第几天(周一第一天)dt[''].dt.dayofyear:返回一年中的第几天dt[''].dt.quarter:返回第几季dt[''].dt.is_month_start/is_month_end/is_year_start/is_year_end/ is_quarter_start/is_quarter_end:返回bool,是否是每月(年、季)的第一天或最后 一天dt[''].dt.is_leap_year:返回bool,是否是闰年dt[''].dt.to_period('Q'):以特定频率显示日期(Q以季度频率显示日期)
DataFrame中的str属性
dt[''].str.contains(str):查询某一列包含str字符串的数据dt[''].str.split(pat=str,expand=True,n=int):将字符串按pat分割,expand=True表示是否将返回值转换成dataframe,n表示分割几次dt[''].str.sllice(start,end,step):切片子字符串【start,end),步长为stepdt[''].str.cat(list[Any]|Series|DataFrame,step:str):字符串拼接df['c1'].str.cat(df['c2'],'&')#c2是字符串 df['c1'].str.cat(df['c2'].astype(str),'&')#c2不是字符串dt[''].str.replace(pat=str,repl=str):将某列的pat替换成repldt[''].str.slice_replace(start,stop,repl):将某列【start,stop)之间的字符串替换成repldt[''].str.startswith/endswith(pat=str):判断某列字符串两端的字符判断dt[''].str.get(n):通过下标获取字符dt[''].str.pad(width,side,fillchar):字符串左右补充,side=left/right/both,将填充字符fillchar填充到side端,填充到width的宽度dt[''].str.strip()/lstrip()/rstrip():去除两端空格、左边空格、右边空格
Pandas中的resample方法
Pandas中的resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法。重新取样时间序列数据。
方便的时间序列的频率转换和重采样方法。对象必须具有类似datetime的索引(DatetimeIndex、PeriodIndex或TimedeltaIndex),或将类似datetime的值传递给on或level关键字。
DataFrame.resample(rule, axis=0, closed=None, label=None, convention='start', kind=None,
loffset=None, base=None, on=None, level=None, origin='start_day', offset=None)
参数详解
| 参数 | 说明 |
|---|---|
| rule | 表示目标转换的偏移量字符串或对象 |
| freq | 表示重采样频率,例如‘M’、‘5min’,Second(15) |
| how=‘mean’ | 用于产生聚合值的函数名或数组函数,例如‘mean’、‘ohlc’、np.max等,默认是‘mean’,其他常用的值由:‘first’、‘last’、‘median’、‘max’、‘min’ |
| axis=0 | 哪个轴用于向上采样或向下采样。对于序列,这将默认为0,即沿着行。必须是DatetimeIndex, TimedeltaIndex或PeriodIndex。默认是纵轴,横轴设置axis=1 |
| fill_method = None | 升采样时如何插值,比如‘ffill’、‘bfill’等 |
| closed = ‘right’ | 在降采样时,各时间段的哪一段是闭合的,‘right’或‘left’,默认‘right’ |
| label= ‘right’ | 在降采样时,如何设置聚合值的标签,例如,9:30-9:35会被标记成9:30还是9:35,默认9:35 |
| convention = None | 当重采样时期时,将低频率转换到高频率所采用的约定(start或end)。默认‘end’ |
| kind = None | 聚合到时期(‘period’)或时间戳(‘timestamp’),默认聚合到时间序列的索引类型 |
| loffset = None | 调整重新取样的时间标签 |
| base | 对于平均细分1天的频率,为累计间隔的“起源”。例如,对于“5min”频率,基数可以从0到4。默认值为0。 |
| on | 对于数据流,要使用列而不是索引进行重采样。列必须与日期时间类似。 |
| level | 对于多索引,用于重采样的级别(名称或数字)。级别必须与日期时间相似 |
| origin | 要调整分组的时间戳。起始时区必须与索引的时区匹配。如果没有使用时间戳,也支持以下值:epoch:原点是1970-01-01’;start ': origin是timeseries的第一个值;“start_day”:起源是timeseries午夜的第一天; |
| offset | 加到原点的偏移时间增量 |
index = pd.date_range('1/1/2000', periods=9, freq='T')
series = pd.Series(range(9), index=index)
series
2000-01-01 00:00:00 0
2000-01-01 00:01:00 1
2000-01-01 00:02:00 2
2000-01-01 00:03:00 3
2000-01-01 00:04:00 4
2000-01-01 00:05:00 5
2000-01-01 00:06:00 6
2000-01-01 00:07:00 7
2000-01-01 00:08:00 8
Freq: T, dtype: int64
将该系列数据采样到3分钟箱中,并对落入箱中的时间戳的值求和。
series.resample('3T').sum()
2000-01-01 00:00:00 3
2000-01-01 00:03:00 12
2000-01-01 00:06:00 21
Freq: 3T, dtype: int64
如上所述,将系列下采样到3分钟的容器中,但请使用右侧边缘而不是左侧标记每个容器。 请注意,用作标签的存储桶中的值不包含在其标记的存储桶中。 例如,在原始系列中,存储区2000-01-01 00:03:00包含值3,但重新采样的存储区中标有2000-01-01 00:03:00的总和值不包含3( 如果是,则总和为6,而不是3)。 要包括此值,请关闭bin间隔的右侧,如下面的示例所示。
series.resample('3T', label='right').sum()
2000-01-01 00:03:00 3
2000-01-01 00:06:00 12
2000-01-01 00:09:00 21
Freq: 3T, dtype: int64
如上所述,将系列降采样到3分钟的箱中,但关闭箱间隔的右侧。
series.resample('3T', label='right', closed='right').sum()
2000-01-01 00:00:00 0
2000-01-01 00:03:00 6
2000-01-01 00:06:00 15
2000-01-01 00:09:00 15
Freq: 3T, dtype: int64
series.resample('30S').asfreq()[0:5] # Select first 5 rows
asfreq():保持原有频率不变,不改变原有数据,就是不进行聚合运算
2000-01-01 00:00:00 0.0
2000-01-01 00:00:30 NaN
2000-01-01 00:01:00 1.0
2000-01-01 00:01:30 NaN
2000-01-01 00:02:00 2.0
Freq: 30S, dtype: float64
将序列上采样到30秒的箱子中,并使用bfill方法填充NaN值。
series.resample('30S').bfill()[0:5]
2000-01-01 00:00:00 0
2000-01-01 00:00:30 1
2000-01-01 00:01:00 1
2000-01-01 00:01:30 2
2000-01-01 00:02:00 2
Freq: 30S, dtype: int64
pandas合并多个excel(相同字段)
os.walk()以递归的方式遍历一个目录树,获取关于目录结构的信息,包括其子目录和文件。
os.walk(top, topdown=True, onerror=None, followlinks=False) 是 os 模块中的一个函数,用于生成遍历目录树的文件名。这个函数返回一个三元组 (dirpath, dirnames, filenames)。
- dirpath 是一个字符串,表示正在遍历的目录的路径。
- dirnames 是一个列表,包含了
dirpath下所有子目录的名字。 - filenames 是一个列表,包含了非目录文件的名字。
参数详解
- top:要遍历的顶级目录的路径。
- topdown (可选):如果为
True(默认值),则从顶级开始向下遍历。如果为False,则从底部的子目录开始向上遍历。 - onerror (可选):是一个函数,用于错误处理。如果指定,则应该是一个接受单个参数(异常实例)的函数。如果未指定或为
None,错误将被忽略。 - followlinks (可选):如果为
True,则会遍历符号链接指向的目录。
示例
import os
# 指定顶级目录路径
top_path = 'my_project'
# 使用 os.walk() 遍历目录
for dirpath, dirnames, filenames in os.walk(top_path):
print(f"当前目录: {dirpath}")
print("子目录:")
for dirname in dirnames:
print(f" {dirname}")
print("文件:")
for filename in filenames:
print(f" {filename}")
print("-" * 20) # 打印分隔线以区分不同的目录
合并多个相同字段的excel
'''导入pandas库和os库'''
import pandas as pd
import os
'''定义一个空DataFrame对象,用于添加每个excel中的内容,注意列名一致'''
df_empty=pd.DataFrame(columns=['列1','列2','列3','列4','列5'])
'''定义文件夹的路径'''
file_directory =r'excel所在文件夹路径'
#dirpath为当前路径,dirnames为当前路径下的文件夹,filenames为当前路径下所有文件 。
'''利用os库的walk功能遍历文件夹里的所有文件,并读取文件名字'''
for dirpath, dirnames, filenames in os.walk(file_directory):
for filename in filenames:
'''os.path.join能够将文件夹的路径和文件名字合并成每个文件的完整路径'''
file_path = os.path.join(dirpath, filename)
rd=pd.read_excel(file_path,"Sheet1",header=0)
df_empty=pd.concat([df_empty,rd],ignore_index=True)
df_empty.to_excel(r'总体汇总.xlsx保存路径')
删除某个字段包含某些词汇的数据行
| 正则中的或操作符
na=False 参数表示如果某行的`说明字面`字段是空值(NaN),则该行不会被选中。
flags=re.IGNORECASE 参数使得匹配过程不区分大小写。
df.drop(df[df['列名'].str.contains('词汇1|词汇2', na=False,flags=re.IGNORECASE)].index,
inplace=True)
pandas的nlargest()和nsmallest()的详细用法
Pandas库中的DataFrame方法nlargest(),用于返回DataFrame中指定列中最大值的行,nsmallest()获取指定列的最小的几行
df.nlargest()是一个DataFrame的方法,用于返回DataFrame中最大的n个值所在的行。它的语法如下:
df.nlargest(n, columns, keep='first')
参数说明:
n:要返回的最大值的数量。columns:用于排序的列名或列名列表。keep:指定如何处理具有相同值的行。默认值为’first’,表示保留第一个出现的行;如果设置为’last’,则保留最后一个出现的行。
df1.nlargest(3,列名1):按列名1获取最高的3行数据,并按降序排序。
分组后取最大的几行
按分组依据分组后,根据列获取最大的n行df1.groupby(by='分组依据').apply(lambda x:x.nlargest(n,列名))
分组之后再求和df1.groupby(by='分组依据').apply(lambda x:x.nlargest(n,列名)).sum(level='分组依据')
pandas的transform函数
transform可以高效地汇总数据且不改变数据行数,该函数的核心功能是,既计算了统计值,又保留了明细数据,类似于窗口函数。
- 作用于单列
df1['列名'].transform(np.log)内置函数,对列对数化df1['列名'].transform(lambda s:s+1)使用lambda表达式df1['列名'].transform([np.log, lambda s: s+1, np.sqrt])多个函数计算多列df1['列名'].transform(lambda s: (s - s.mean()) / s.std())做标准化
- 作用于整个dataframe,作用于每一列中
df1.loc[:,'列名1':'列名2'].transform(lambda s:(s-s.mean()) /s.std())df1.loc[:,'列名1':'列名2'].transform([np.log, lambda s: s+1])传入多个变换函数时,会生成MultiIndex格式的字段名df1.loc[:, '列名1': '列名2'].transform({'列名1': lambda s:(s-s.mean())/s.std(),'列名2': [np.log, np.sqrt]}))
- 作用于groupby分组后
df1['mean']=df1.groupby('分组依据列')[['列名1','列名2']].transform('mean')分组后,对每组的列求平均值
Python的os方法
os.path 模块是 Python 标准库中 os 模块的一部分,专门用于操作和处理文件路径。
os.path 提供了一组强大的工具来对文件和目录路径进行各种操作,例如获取文件名、判断路径是否存在、路径拼接、路径规范化等。
os.path 模块在跨平台操作系统中表现良好,使得同一段代码能够在不同操作系统(如 Windows、Linux、macOS)上运行时处理路径相关问题。
- os.chdir(path):要切换到的新路径
- os.getcwd(path):返回当前工作目录
- os.makedirs(name):递归创建多级目录
- os.mkdir(path):创建文件夹
- os.remove(path):删除路径为path的文件
- os.removedirs(path):递归删除空目录
- os.rmdir(path):删除指定空目录
以下是 os.path 模块的几种常用方法:
1. 路径操作
- os.path.basename(path):路径的最后一部分(最后一个'/'后面的)
- os.path.dirname(path):路径去掉最后一部分(最后一个'/'前面的)
- os.path.split(path):将路径根据最后一个'/'分割成两部分的元组
- os.path.splitext(path):将路径根据扩展名分成两部分的元组
2. 路径信息获取
3. 路径规范化
4. 路径比较
5. 平台依赖功能
glob模块
glob.glob()函数的参数和返回值
-
def glob(pathname, *, recursive=False):pathname:该参数是要匹配的路径recursive:如果是true就会递归的去匹配符合的文件路径,默认是False
-
返回
匹配到的路径列表 -
glob.iglob的参数与glob.glob()一样 -
def iglob(pathname, *, recursive=False):pathname:该参数是要匹配的路径recursive:如果是true就会递归的去匹配符合的文件路径,默认是False
-
返回一个
迭代器,遍历该迭代器的结果与使用相同参数调用glob()的返回结果一致
glob.glob('./test/*') #匹配./test/下的所有文件和目录,返回路径列表,不递归
glob.glob('./test/**',recursive=True)#递归匹配./test/**下的所有文件和目录,返回路径列表
#如果要对某个目录下递归匹配,要在目录下加两个*
相关性分析
pandas的dataframe.corr()方法用于计算DataFrame中各列之间的相关系数。
DataFrame.corr(method='pearson', min_periods=1)
其中,method参数用于指定计算相关系数的方法,常用的方法包括:
pearson:皮尔逊相关系数(默认)kendall:肯德尔相关系数spearman:斯皮尔曼相关系数
min_periods参数用于指定计算相关系数所需的最小非缺失值数量。