DateFrame的添加
上文中DateFrame的增加中,因版本弃置append函数
如果你想要向 DataFrame 添加一行,建议的方法是首先创建一个新的 DataFrame 来表示这行数据,然后使用 pd.concat()
函数来合并它们。
concat
语法:
objs: 要连接的 DataFrame 或 Series 对象的列表或字典。
axis: 指定连接的轴,0 或 'index' 表示按行连接,1 或 'columns' 表示按列连接。
join: 指定连接方式,'outer' 表示并集(默认),'inner' 表示交集。
ignore_index: 如果为 True,则忽略原始索引并生成新的索引。
keys: 用于在连接结果中创建层次化索引。
levels: 指定层次化索引的级别。
names: 指定层次化索引的名称。
verify_integrity: 如果为 True,则在连接时检查是否有重复索引。
sort: 如果为 True,则在连接时对列进行排序。
copy: 如果为 True,则复制数据。
案例:
可使用该方法,拼接DateFrame对象
使用 ignore_index ,按行,或列连接 df1 和 df2,并忽略原始索引。
使用 join='inner'(交集),jion=‘outer’(并集)按行合并
案例:
按行合并,只匹配column相同的列,行被堆叠
取jion=‘outer’时
按列合并,只匹配index相同的行,列被堆叠
取jion=‘outer’时
Dataframe和Series连接:
创建Dataframe和Series对象:
按行连接 DataFrame 和 Series
按列连接 DataFrame 和 Series:
函数
DateFrame常用的统计学函数
例:当前有如下DateFrame对象
count():统计某个非空值的数量
sum():求和(按升序或降序排列,取中间的数,如果是偶数个元素,则取中间两个数的平均值)
mean():求均值
median():求中位数
std():求标准差
var():求样本方差(numpy的方差默认为总体方差,pandas默认为样本方差)
min():求最小值
max():求最大值
abs():求绝对值
prod():求所有数值的乘积
重置索引
重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行、列标签与 DataFrame 中的数据逐一匹配。通过重置索引操作,您可以完成对现有数据的重新排序。如果重置的索引标签在原 DataFrame 中不存在,那么该标签对应的元素值将全部填充为 NaN。
1 reindex
语法:
参数:
-
labels 或 index: 新的行索引标签。如果提供了
index
,则忽略labels
。 -
columns: 新的列索引标签。
-
axis: 指定应用
labels
或index
和columns
的轴(0 表示行,1 表示列)。如果提供了index
或columns
,则忽略此参数。 -
method: 插值方法。可以是 'backfill'/'bfill'(向后填充)或 'pad'/'ffill'(前向填充)。这将用于填充新索引中不存在于原始索引中的位置。
-
copy: 如果为
True
,即使新索引与旧索引相同,也会创建一个新的对象返回。 -
level: 如果索引是多层次的,则可以指定一个级别来重新排序。
-
fill_value: 用于填充新索引中未在原始索引中找到的位置的值,默认为
numpy.nan
。 -
limit: 当使用
method='pad'/‘ffill’
或method='backfill'/‘bfill’
进行填充时,限制连续填充的最大数量。 -
tolerance: 当使用
method='pad'/‘ffill’
或method='backfill'/‘bfill’
时,允许的最大间隔。间隔是指在进行填充时,允许跳过的缺失值的最大距离。
案例:
重新索引行:
因为原行标签中不含'd',故重新索引之后,d行没有值匹配,所以全为NaN。
使用 method='ffill' 进行前向填充,因此 'd' 对应的行填充了前一行的值。
重新列索引,增加了原本没有的“D”,没有匹配的值,故自动填充为MaN
与行索引修改方法一致。
2 reindex_like
reindex_like 方法用于将一个 DataFrame 或 Series 的索引重新排列,使其与另一个 DataFrame 或 Series 的索引相匹配。如果在重新索引的过程中,新的索引与原始索引不完全匹配,那么不匹配的位置将会被填充为 NaN 值。
语法:
案例:
使用 reindex_like 对齐 df1 的行索引到 df2(用的仍然是df1的数据,行索引变为df2的)
df1 的行索引被重新索引为 df2 的行索引,因此 df1 中不存在的行索引 'd' 对应的行填充了 NaN。
对齐列索引
与对其行索引方法一致。
遍历
对于 Series 而言,您可以把它当做一维数组进行遍历操作;而像 DataFrame 这种二维数据表结构,则类似于遍历 Python 字典
Series 可直接获取相应的 value,而 DataFrame 则会获取列标签
1 Series的遍历
使用 items()
使用 index 属性
使用 values 属性
2 DataFrame 遍历
如图遍历所得时DateFrame对象的标签。
遍历行
iterrows() 方法用于遍历 DataFrame 的行,返回一个包含索引和行的迭代器。
itertuples() 方法用于遍历 DataFrame 的行,返回一个包含行数据的命名元组。
当处理大型数据集时,应尽量避免使用 iterrows(),因为它的性能相对较差。
itertuples() 是遍历 DataFrame 的推荐方法,因为它在速度和内存使用上都更高效。
遍历列
使用属性遍历
loc 和 iloc 方法可以用于按索引或位置遍历 DataFrame 的行和列。
排序
1 sort_index
sort_index 方法用于对 DataFrame 或 Series 的索引进行排序。
语法:
参数 :
-
axis:指定要排序的轴。默认为 0,表示按行索引排序。如果设置为 1,将按列索引排序。
-
ascending:布尔值,指定是升序排序(True)还是降序排序(False)。
-
inplace:布尔值,指定是否在原地修改数据。如果为 True,则会修改原始数据;如果为 False,则返回一个新的排序后的对象。
案例:
如图将打乱的行标签['b', 'c', 'a'],重新排列为['a','b', 'c',]
2 sort_values
sort_values 方法用于根据一个或多个列的值对 DataFrame 进行排序。
语法:
-
by:列的标签或列的标签列表。指定要排序的列。
-
axis:指定沿着哪个轴排序。默认为 0,表示按列排序。如果设置为 1,将按行排序。
-
ascending:布尔值或布尔值列表,指定是升序排序(True)还是降序排序(False)。可以为每个列指定不同的排序方向。
-
inplace:布尔值,指定是否在原地修改数据。如果为 True,则会修改原始数据;如果为 False,则返回一个新的排序后的对象。
-
kind:排序算法。默认为 'quicksort',也可以选择 'mergesort' 或 'heapsort'。
-
na_position:指定缺失值(NaN)的位置。可以是 'first' 或 'last'。
如图所示,便是将DateFrame对象根据B列来整体升序排列。
去重
drop_duplicates 方法用于删除 DataFrame 或 Series 中的重复行或元素。
语法:
案例:
如图可见:drop_duplicates:去重
by:指定重复的列或列名的列表
keep:处理重复项:-first:保留第一项 ,last:保留最后一项 ,False:所有重复都不保留
分组
1 groupby
groupby 方法用于对数据进行分组操作,这是数据分析中非常常见的一个步骤。通过 groupby,你可以将数据集按照某个列(或多个列)的值分组,然后对每个组应用聚合函数,比如求和、平均值、最大值等。
语法:
如图,可将原DateFrame对象根据A列的情况,将其分为2组。
如图,在分组的基础上,还可对分组出的对象进行运算:根据A列情况分为两组,再分别取出两组中C列的算数平均数。
如图,在原基础上,通过transfrom函数可将分组好求出的平均数分别打印在原DateFrame对象的相应位置。之后可将其作为新列添加到原对象。
如图则是将函数正态函数标准化取值,然后再作为新列添加至原对象
2 filter
通过 filter() 函数可以实现数据的筛选,该函数根据定义的条件过滤数据并返回一个新的数据集
如图:表示对A列情况分组后,筛选出C列平均值大于4的对象。
合并
merge 函数用于将两个 DataFrame 对象根据一个或多个键进行合并,类似于 SQL 中的 JOIN 操作。这个方法非常适合用来基于某些共同字段将不同数据源的数据组合在一起,最后拼接成一个新的 DataFrame 数据表。
语法:
merge:两个Dataframe按照公共列进行合并
参数:
left:左边的Dataframe
right:右边的Dataframe
on:指定两个Dataframe的公共列,如果不指定,则按照相同的列名作为公共列
how:连接方式:
inner:内连接,默认
outer:外连接,并集
left:左连接,以左边的Dataframe为准,右边的Dataframe如果有缺失值,则补充为NaN
right:右连接,以右边的Dataframe为准,左边的Dataframe如果有缺失值,则补充为NaN
时间
1 datetime
datetime 模块提供了用于处理日期和时间的类。
2 Timestamp
Timestamp 是一个特殊的 datetime 类型,用于表示单个时间点。它是 pandas 时间序列功能的核心组件,提供了丰富的方法和属性来处理日期和时间数据。
图中的1729843950000,后9位数字(843950000)表示秒的下个单位数值,前面的数字(1729)这表示1729秒,并换算成年月日,时分秒,加在1970年1月1日0点0分0秒的基础上。即1729秒换算得28分,49秒。故结果为1970-01-01 00:28:49.843950
3 日期解析
pd.to_datetime() 方法用于将字符串或其他格式的日期转换为 Pandas 的 Datetime 对象。
4 date_range
date_range() 函数用于生成一个固定频率的日期时间索引(DatetimeIndex)。这个函数非常灵活,可以用于生成各种时间序列数据。
语法:
freq:时间频率。常见的频率包括 'D'(天)、'H'(小时)、'T' 或 'min'(分钟)、'S'(秒)等。
start:开始时间
end:结束时间
periods:取整数,默认为 None。生成的日期时间索引的数量。
5 时间差
Timedelta 是一个用于表示时间间隔的对象。它可以表示两个时间点之间的差异,或者表示某个时间段的长度。Timedelta 对象可以用于时间序列分析、日期运算等场景。
时间差加减
6 时间日期格式化
strftime 用于将日期时间对象转换为指定格式的字符串,而 strptime 用于将字符串解析为日期时间对象。
时间日期符号: