numpy.ndarray:n维数组
在numpy中以np.nan表示缺失值,它是一个浮点数。
参考:NumPy中文网
区别
联系

主要用于生成一个固定频率的时间索引
date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, inclusive=None, **kwargs)
函数调用时至少要指定参数start、end、periods中的两个。
| 参数 | 数据类型 | 意义 |
|---|---|---|
| start | str or datetime-like, optional | 生成日期的左侧边界 |
| end | str or datetime-like, optional | 生成日期的右侧边界 |
| periods | integer, optional | 生成周期 |
| freq | str or DateOffset, default ‘D’ | 常见取值见下表 |
| tz | str or tzinfo, optional | 返回本地化的DatetimeIndex的时区名,例如’Asia/Hong_Kong’ |
| normalize | bool, default False | 生成日期之前,将开始/结束时间初始化为午夜 |
| name | str, default None | 产生的DatetimeIndex的名字 |
| closed | {None, ‘left’, ‘right’}, optional | 使区间相对于给定频率左闭合、右闭合、双向闭合(默认的None) |
| freq 常见取值 | 说明 |
|---|---|
| M | 月 |
| B | 工作日 |
| W | 星期天 |
| D | 天 |
| H | 小时 |
| T | 分钟 |
| S | 秒 |
| L | 毫秒 |
loc表示location的意思;iloc中的loc意思相同,前面的i表示integer,所以它只接受整数作为参数。

索引方式:
索引对象类型:
切片方式:
索引类型:
参数省略:
引用方式:
df.dropna(
axis=0, #删除维度,0为行,1为列。默认为0。
how='any', #删除的判断条件。'any'代表这一行只要有一个空值就删除。'all'表示,这一行都是空值才删除。
thresh=None, # 例如,thresh=N,即,只要空值大于等于N的都删除,只保留空值小于N的行和列。
subset=None, # list,对特定的列的缺失值处理。
inplace=False # 布尔值,是否修改原数据。默认为False。
)
drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)
参数解析:
subset:列名或列名序列,对某些列来识别重复项,默认情况下使用所有列。
keep:可选值有first,last,False,默认为first,确定要保留哪些重复项。
first:删除除第一次出现的重复项,即保留第一次出现的重复项。
last:保留最后一次出现的重复项。
False:删除所有重复项。
inplace:布尔值,默认为False,返回副本。如果为True,则直接在原始的Dataframe上进行删除。
ignore_index:布尔值,默认为False,如果为True,则生成的行索引将被标记为0、1、2、…、n-1。
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
参数说明:
DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False)
返回值在请求的轴上的乘积
DataFrame.prod(axis=None, skipna=True, level=None, numeric_only=None, min_count=0, **kwargs)
| 参数 | 值 | 描述 |
|---|---|---|
| axis | {索引(0),列(1)} | 要应用的函数的轴。 |
| skipna | 布尔值,默认为True | 计算结果时排除NA/NULL值。 |
| level | Int或Level名称,默认为无 | 如果轴是多索引(分层),则沿特定级别计数,折叠为系列。 |
| numeric_only | 布尔,默认为无 | 包括浮点型、整型、布尔型列。如果没有,将尝试使用所有内容,然后仅使用数字数据。 |
| min_count | 整型,默认为0 | 执行操作所需的有效值数。如果少于 min_count 如果存在非NA值,则结果将为NA。 |
重采样是时间序列分析中处理时序数据的一项基本技术。它是关于将时间序列数据从一个频率转换到另一个频率,它可以更改数据的时间间隔,通过上采样增加粒度,或通过下采样减少粒度。
Pandas中的resample方法用于对时间序列数据进行重采样,可以将数据从一个时间频率转换为另一个时间频率。
df.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, limit=None, base=0)
参数说明:
import pandas as pd
import numpy as np
# 创建一个时间序列数据
rng = pd.date_range('1/1/2021', periods=100, freq='D')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
# 将数据按月份进行重采样,并计算每个月的平均值
ts.resample('M').mean()
使用pandas.DataFrame的plot方法绘制图像会按照数据的每一列绘制一条曲线,默认按照列columns的名称在适当的位置展示图例,比matplotlib绘制节省时间,且DataFrame格式的数据更规范,方便向量化及计算。
DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False,
sharex=None, sharey=False, layout=None, figsize=None,
use_index=True, title=None, grid=None, legend=True,
style=None, logx=False, logy=False, loglog=False,
xticks=None, yticks=None, xlim=None, ylim=None, rot=None,
fontsize=None, colormap=None, position=0.5, table=False, yerr=None,
xerr=None, stacked=True/False, sort_columns=False,
secondary_y=False, mark_right=True, **kwds)
x和y:表示标签或者位置,用来指定显示的索引,默认为None
kind:表示绘图的类型,默认为line,折线图
line:折线图
bar/barh:柱状图(条形图),纵向/横向
pie:饼状图
hist:直方图(数值频率分布)
box:箱型图
kde:密度图,主要对柱状图添加Kernel 概率密度线
area:区域图(面积图)
scatter:散点图
hexbin:蜂巢图
ax:子图,可以理解成第二坐标轴,默认None
subplots:是否对列分别作子图,默认False
sharex:共享x轴刻度、标签。如果ax为None,则默认为True,如果传入ax,则默认为False
sharey:共享y轴刻度、标签
layout:子图的行列布局,(rows, columns)
figsize:图形尺寸大小,(width, height)
use_index:用索引做x轴,默认True
title:图形的标题
grid:图形是否有网格,默认None
legend:子图的图例
style:对每列折线图设置线的类型,list or dict
xticks:设置x轴刻度值,序列形式(比如列表)
yticks
xlim:设置坐标轴的范围。数值,列表或元组(区间范围)
ylim
rot:轴标签(轴刻度)的显示旋转度数,默认None
fontsize : int, default None#设置轴刻度的字体大小
colormap:设置图的区域颜色
colorbar:柱子颜色
position:柱形图的对齐方式,取值范围[0,1],默认0.5(中间对齐)
table:图下添加表,默认False。若为True,则使用DataFrame中的数据绘制表格
yerr:误差线
xerr
stacked:是否堆积,在折线图和柱状图中默认为False,在区域图中默认为True
sort_columns:对列名称进行排序,默认为False
secondary_y:设置第二个y轴(右辅助y轴),默认为False
mark_right : 当使用secondary_y轴时,在图例中自动用“(right)”标记列标签 ,默认True
x_compat:适配x轴刻度显示,默认为False。设置True可优化时间刻度的显示
cumsum函数是pandas的累加函数,用来求列的累加值。
DataFrame.cumsum(axis=None, skipna=True, args, kwargs)
# 分别统计每一列的缺失值比例和每一行的缺失值比例
df.isna().mean() # 默认mean的axis参数为0,按照行方向计算列的均值。
df.isna().mean(axis=1)
# 如果想要统计每列包含的缺失值个数,只需把mean替换为sum即可。
# 如果想知道缺失的行或列具体实哪一些,可以如下操作:
df[df.isna().sum(1) >= 2]
# 判断有空值的列
df.isnull().any()
# 显示出有空值列的列名的列表
df.columns[iris.isnull().any()].tolist()
返回一列最大值所在行的行索引df.idxmax(),默认参数为0;若参数设置为1,则为一行最大值所在列的列索引df.idxmax(1)。(取最小值为df.idxmin())
pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer', names=None,
index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None,
engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False,
skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False,
skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False,
date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer',
thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None,
comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True,
warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False,
as_recarray=None, compact_ints=None, use_unsigned=None, low_memory=True, buffer_lines=None,
memory_map=False, float_precision=None
常用参数:
filepath_or_buffer:字符串,或者任何对象的read()方法。这个字符串可以是URL,有效的URL方案包括http、ftp、s3和文件。
sep : str, default ‘,’。指定分隔符。如果不指定参数,则会尝试使用逗号分隔。分隔符长于一个字符并且不是‘\s+’,将使用python的语法分析器。并且忽略数据中的逗号。正则表达式例子:’\r\t’。
delimiter : str, default None。定界符,备选分隔符(如果指定该参数,则sep参数失效)
delim_whitespace : boolean, default False. 指定空格是否作为分隔符使用,等效于设定sep=’\s+’。如果这个参数设定为Ture那么delimiter 参数失效。在版本0.18.1支持
header : int or list of ints, default ‘infer’。指定行数用来作为列名,数据开始行数。如果文件中没有列名,则默认为0,否则设置为None。如果明确设定header=0 就会替换掉原来存在列名。header参数可以是一个list例如:[0,1,3],这个list表示将文件中的这些行作为列标题(意味着每一列有多个标题),介于中间的行将被忽略掉。
注意:如果skip_blank_lines=True 那么header参数忽略注释行和空行,所以header=0表示第一行数据而不是文件的第一行。
names : array-like, default None。用于结果的列名列表,如果数据文件中没有列标题行,就需要执行header=None。默认列表中不能出现重复,除非设定参数mangle_dupe_cols=True。
index_col : int or sequence or False, default None。用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。如果文件不规则,行尾有分隔符,则可以设定index_col=False 保证pandas用第一列作为行索引。
usecols : array-like, default None。返回一个数据子集,该列表中的值必须可以对应到文件中的位置(数字可以对应到指定的列)或者是字符传为文件中的列名。例如:usecols有效参数可能是[0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’]。使用这个参数可以加快加载速度并降低内存消耗。
squeeze : boolean, default False。如果文件值包含一列,则返回一个Series。
prefix : str, default None。在没有列标题时,给列添加前缀。例如:添加‘X’ 成为 X0, X1, …
mangle_dupe_cols : boolean, default True。重复的列,将‘X’…’X’表示为‘X.0’…’X.N’。如果设定为false则会将所有重名列覆盖。
dtype : Type name or dict of column -> type, default None 每列数据的数据类型。例如 {‘a’: np.float64, ‘b’: np.int32}
engine : {‘c’, ‘python’}, optional。使用的分析引擎。可以选择C或者是python。C引擎快但是Python引擎功能更加完备。
converters : dict, default None。列转换函数的字典。key可以是列名或者列的序号。
skipinitialspace : boolean, default False。忽略分隔符后的空白(默认为False,即不忽略).
skiprows : list-like or integer, default None。需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)。
skipfooter : int, default 0。从文件尾部开始忽略。 (c引擎不支持)
nrows : int, default None。需要读取的行数(从文件头开始算起)。
na_values : scalar, str, list-like, or dict, default None。一组用于替换NA/NaN的值。如果传参,需要制定特定列的空值。默认为‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.
keep_default_na : bool, default True。如果指定na_values参数,并且keep_default_na=False,那么默认的NaN将被覆盖,否则添加。
na_filter : boolean, default True。是否检查丢失值(空字符串或者是空值)。对于大文件来说数据集中没有空值,设定na_filter=False可以提升读取速度。
verbose : boolean, default False。是否打印各种解析器的输出信息,例如:“非数值列中缺失值的数量”等。
skip_blank_lines : boolean, default True。如果为True,则跳过空行;否则记为NaN。
date_parser : function, default None。用于解析日期的函数,默认使用dateutil.parser.parser来做转换。
iterator : boolean, default False。返回一个TextFileReader 对象,以便逐块处理文件。
chunksize : int, default None。文件块的大小, See IO Tools docs for more
informationon iterator and chunksize.
compression : {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, default ‘infer’。直接使用磁盘上的压缩文件。如果使用infer参数,则使用 gzip, bz2, zip或者解压文件名中以‘.gz’, ‘.bz2’, ‘.zip’, or ‘xz’这些为后缀的文件,否则不解压。如果使用zip,那么ZIP包中国必须只包含一个文件。设置为None则不解压。版本0.18.1版本支持zip和xz解压
thousands : str, default None。千分位分割符,如“,”或者“.”
decimal : str, default ‘.’。字符中的小数点 (例如:欧洲数据使用’,‘).
lineterminator : str (length 1), default None。行分割符,只在C解析器下使用。
encoding : str, default None。指定字符集类型,通常指定为’utf-8’. List of Python
standard encodings。
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=None,
quoting=None, quotechar='"', line_terminator='\n', chunksize=None, tupleize_cols=None,
date_format=None, doublequote=True, escapechar=None, decimal='.')
read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None,names=None,
parse_cols=None, parse_dates=False,date_parser=None,na_values=None,thousands=None, convert_float=True,
has_index_names=None, converters=None,dtype=None, true_values=None, false_values=None, engine=None, squeeze=False, **kwds)
常用参数解析:
io : string, path object ; excel 路径。
sheetname : string, int, mixed list of strings/ints, or None, default 0
返回多表使用sheetname=[0,1],若sheetname=None是返回全表
注意:int/string 返回的是dataframe,而none和list返回的是dict of dataframe
header : int, list of ints, default 0 指定列名行,默认0,即取第一行,数据为列名行以下的数据;若数据不含列名,则设定 header = None
skiprows : list-like,Rows to skip at the beginning,省略指定行数的数据。
skip_footer : int,default 0, 省略从尾部数的int行数据。
index_col : int, list of ints, default None指定列为索引列,也可以使用u”strings”
names : array-like, default None, 指定列的名字。
usecols:指定要读取的列范围,可以是列名称、列索引或一个包含列名称/索引的列表。
to_excel(self, excel_writer, sheet_name='Sheet1', na_rep='', float_format=None,
columns=None, header=True, index=True, index_label=None,startrow=0, startcol=0,
engine=None, merge_cells=True, encoding=None,inf_rep='inf', verbose=True, freeze_panes=None)
excel_writer:指定要写入的 Excel 文件的路径或文件对象。
sheet_name:指定要写入的工作表名称。
index:指定是否写入行索引,默认为 True。
header:指定是否写入表头,默认为 True。
startrow:指定写入数据的起始行号。
startcol:指定写入数据的起始列号。
na_rep:指定缺失值的表示方式。
columns=None:指定输出某些列 列 = [“名称”, “数字”]
encoding=None:指定编码,常用 utf-8
float_format=None:浮点数保存的格式,默认保存为字符串
float_format=’%.2f’ # 保存为浮点数,保留2位小数
engine=None:保存格式。
有时一个excel内会有多个sheet。但是将两组数据通过to_excel函数先后保存到一个excel内会发现只有后一组保存的数据,因为前一组的数据被后写入的数据覆盖了。
df1.to_excel('xxx.xlsx',sheet_name='df1')
df2.to_excel('xxx.xlsx',sheet_name='df2')
使用pd.ExcelWriter建立一个writer,然后,将df1,df2都使用to_excel(writer, sheet名),最后一次性将这些数据保存,并关闭writer就完成了。
writer = pd.ExcelWriter('xxx.xlsx')
df1.to_excel(writer,sheet_name="df1")
df2.to_excel(writer,sheet_name="df2")
writer.save()
writer.close()
这样会覆盖我们原有的excel数据,如果不想覆盖,可以:
writer = pd.ExcelWriter('保存.xlsx') # 如果不存在,会自动创建excel
df = pd.read_excel("xxx.xlsx", sheet_name=xxx)
......
df_res.to_excel(writer, sheet_name=xxx, index=False)
# 一次写入多个sheet
with pd.ExcelWriter('writer.xlsx') as writer:
data.to_excel(writer,sheet_name='a')
data.to_excel(writer,sheet_name='b')
data.to_excel(writer,sheet_name='c')
# 追加新sheet
with pd.ExcelWriter('writer.xlsx',mode='a',engine='openpyxl') as writer:
data2.to_excel(writer,sheet_name='d')
# 测试excel追加数据至sheet
with pd.ExcelWriter('writer.xlsx',mode='a',engine='openpyxl') as writer:
data.to_excel(writer,sheet_name='d')
DataFrame.describe(percentiles=None, include=None, exclude=None)
对于对象类型数据(例如字符串或时间戳),则结果的指数将包括count,unique, top,和freq。top标识最常见的值。freq标识最常见的值的出现频次。时间戳还包括first和last指标。如果多个对象值具有最高计数,那么将从具有最高计数的那些中任意选择count和top结果。
可以沿着一条轴将多个对象进行堆叠,其使用方式类似数据库中的数据表合并。
pandas.concat(objs, axis=0, join=’outer’, join_axes=None, ignore_index=False, keys=None, levels=None, verify_integrity=False, sort=None, copy=True)
| 参数 | 作用 |
|---|---|
| axis | 默认为0,0为行拼接,1为列拼接,意为沿着连接的轴。 |
| join | {‘inner’,‘outer’},默认为“outer”。如何处理其他轴上的索引。outer为并集和inner为交集。 |
| ignore_index | 接收布尔值,默认为False。如果设置为True,则表示清除现有索引并重置索引值 |
| keys | 接收序列,表示添加最外层索引 |
| levels | 用于构建MultiIndex的特定级别(唯一值) |
| names | 设置了keys和level参数后,用于创建分层级别的名称 |
| verify_integerity | 检查新的连接轴是否包含重复项。接收布尔值,当设置为True时,如果有重复的轴将会抛出错误,默认为False |
merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False)
参数说明:
能够通过索引或指定列来连接多个DataFrame对象
join(other,on = None,how =‘left’,lsuffix =‘’,rsuffix =‘’,sort = False )
# 选出col0在30到80之间的行中col3与col1之差为奇数的行,
# 或者col2大于50中的行col3超过col1均值的行
c11 = df["col 0"].between(30, 80)
c12 = (df["col 3"] - df["col 1"]) % 2 ==1
c21 = df["col 2"] > 50
c22 = df["col 3"] > df["col 1"].mean()
df.loc[(c11 & c12) | (c21 & c22)]
# dataframe保留两位小数
df = df.round(2)
# 写入WPD
def WriteTXT(data: pd.DataFrame, savepath: str):
with open(savepath, "w", 65536, 'utf-8') as file:
h1 = "// matfile"
file.write(h1.strip() + "\n")
for key, items in data.iterrows():
items_l = list(items)
line = str()
for i in range(len(items_l)):
if i == 0:
line += items_l[i]
line += ' '
elif i == 1:
line += str(items_l[i])
line += ' '
elif i == 2:
line += items_l[i]
line += ' '
elif i == len(items_l) - 1:
line += str("%.6f" % items_l[i])
else:
line += str("%.6f" % items_l[i])
line += ' '
file.write(line.strip() + "\n")
file.write(h1.strip() + "\n")
pd.set_option()参数详解
Python的reshape的用法:reshape(1,-1)、reshape(-1,1)
https://github.com/datawhalechina/joyful-pandas
https://github.com/datawhalechina/powerful-numpy