当前位置: 首页 > news >正文

Python基础14_Pandas(下)

目录

一、函数

1、重置索引

1. reindex()

2. reindex_like()

2、遍历

1. Series遍历

2. DataFrame遍历

3、排序

1. sort_index

2. sort_values

4、去重

5、分组

1. groupby

2. filter

6、合并

7、时间

1. datetime

2. Timestamp

3. 日期解析

4.date_range

5. 时间差

6. 时间日期格式化


一、函数


1、重置索引

重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行、列标签与 DataFrame 中的数据逐一匹配。通过重置索引操作,可以完成对现有数据的重新排序。如果重置的索引标签在原 DataFrame 中不存在,那么该标签对应的元素值将全部填充为 NaN。

1. reindex()

reindex() 方法用于重新索引 DataFrame 或 Series 对象。重新索引意味着根据新的索引标签重新排列数据,并填充缺失值。如果重置的索引标签在原 DataFrame 中不存在,那么该标签对应的元素值将全部填充为 NaN。

"""
reindex() 重置DataFrame索引参数index:新的行索引column:新的列索引method:新的行或列有缺省值时,可以填充指定值ffill:前向填充,用前一行(列)填充当前行(列)bfill:后向填充,用后一行(列)填充当前行(列)fill_value:当新的行或列有缺省值时,可以使用指定的值进行填充"""
def pd_df_reindex():df = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]}, index=['a','b','c'])new_index = ['a','b','c','d']df1 = df.reindex(new_index, axis=0)print(df1)new_column = ['A','B','C','D']df2 = df.reindex(columns=new_column, method='ffill')print(df2)df3 = df.reindex(new_index, fill_value=0)
2. reindex_like()

reindex_like 方法用于将一个 DataFrame 或 Series 的索引重新排列,使其与另一个 DataFrame 或 Series 的索引相匹配。如果在重新索引的过程中,新的索引与原始索引不完全匹配,那么不匹配的位置将会被填充为 NaN 值。

"""
reindex_like()将一个 DataFrame 或 Series 的索引重新排列,使其与另一个 DataFrame 或 Series 的索引相匹配。DataFrame.reindex_like(other, method=None, copy=True, limit=None, tolerance=None)参数1. other:- 类型:DataFrame 或 Series。- 描述:用于对齐索引和列的参考对象。2. method:- 类型:字符串,默认为 None。- 描述:用于填充缺失值的方法。可选值包括 'ffill'(前向填充)、'bfill'(后向填充)等。3. copy:- 类型:布尔值,默认为 True。- 描述:是否返回新的 DataFrame 或 Series。4. limit:- 类型:整数,默认为 None。- 描述:指定连续填充的最大数量。5. tolerance:- 类型:标量或字典,默认为 None。- 描述:指定重新索引时的容差。
"""def pd_df_reindex_like():df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b','c'])df2 = pd.DataFrame({'A': [7,8,9], 'B': [10,11,12]}, index=['b','c','d'])df3 = df1.reindex_like(df2)print(df3)df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b','c'])df2 = pd.DataFrame({'A': [7,8,9], 'B': [10,11,12]}, index=['a','b','c'])df4 = df1.reindex_like(df2)print(df4)

2、遍历

对于 Series ,可以把它当做一维数组进行遍历操作;

而像 DataFrame 这种二维数据表结构,则类似于遍历 Python 字典。

Series 可直接获取相应的 value,而 DataFrame 则会获取列标签。

1. Series遍历
def pd_series_iter():# Series遍历 类似一维数组s = pd.Series([1,2,3,4,5,6])for i in s:print(i)# DataFrame不能直接遍历,打印结果是列的名称df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})for i in df:print(i)"""Series遍历1、通过item()遍历"""for index,value in s.item():print(f'index:{index}, value:{value}')"""2、通过index遍历"""for index in s.index:print(f'index:{index}, value:{s[index]}')"""3、通过value遍历"""for value in s.values:print(f'value:{value}')
2. DataFrame遍历
"""
DataFrame遍历
"""
def pd_df_iter():df =  pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})print(df)print()"""行遍历"""# 通过iterrows遍历,返回index和row两个变量,遍历返回的row为Series变量print(1)for index, row in df.iterrows():print(f'index{index}, row{row}')print()# 通过itertuples遍历,返回row一个变量,遍历返回值为元组对象print(2)for row in df.itertuples():print(f'row{row}')print()"""列遍历"""# 1、通过items()遍历,返回列索引名和列的Series对象print(3)for col_index, col_values in df.items():print(f'col:{col_index}, value:{col_values}')print()# 2、print(4)  # 使用 loc 遍历行和列for i in df.index:for c in df.columns:value = df.loc[i, c]print(f'value:{value}')

3、排序

1. sort_index

sort_index方法用于对 DataFrame 或 Series 的索引进行排序。

def pd_df_sort():df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]},index=['b','c','a'])print(df)print()"""sort_index()对 DataFrame 或 Series 的索引进行排序DataFrame.sort_index(axis=0, ascending=True, inplace=False)Series.sort_index(axis=0, ascending=True, inplace=False)参数- axis:指定要排序的轴。默认为 0,表示按列索引排序。如果设置为 1,将按行索引排序。- ascending:布尔值,指定是升序排序(True)还是降序排序(False)。- inplace:布尔值,指定是否在原地修改数据。如果为 True,则会修改原始数据;如果为 False,则返回一个新的排序后的对象。"""# ascending=False 降序排列# axis默认为 0,表示按行索引排序df1 = df.sort_index(ascending=False)print(df1)print()# 修改原始数据df.sort_index(ascending=False, inplace=True)print(df)print()
2. sort_values

sort_values 方法用于根据一个或多个列的值对 DataFrame 进行排序。

"""sort_values() 根据一个或多个列的值对 DataFrame 进行排序DataFrame.sort_values(by, axis=0, ascending=True, inplace=False,kind='quicksort', na_position='last')参数- by:列的标签或列的标签列表。指定要排序的列。?- axis:指定沿着哪个轴排序。默认为 0,表示按列排序。如果设置为 1,将按行排序。- ascending:布尔值或布尔值列表,指定是升序排序(True)还是降序排序(False)。可以为每个列指定不同的排序方向。- inplace:布尔值,指定是否在原地修改数据。如果为 True,则会修改原始数据;如果为 False,则返回一个新的排序后的对象。- kind:排序算法。默认为 'quicksort',也可以选择 'mergesort' 或 'heapsort'。- na_position:指定缺失值(NaN)的位置。可以是 'first' 或 'last'。"""# 按A列的值 降序排列df3 = df.sort_values('A',ascending=False, axis=0)print(df3)print()# 按行的值进行排列df4 = df.sort_values(['a','c'],ascending=False,axis=1)print(df4)

4、去重

drop_duplicates 方法用于删除 DataFrame 或 Series 中的重复行或元素。

"""
去重drop_duplicates()删除 DataFrame 或 Series 中的重复行或元素drop_duplicates(by=None, subset=None, keep='first', inplace=False)Series.drop_duplicates(keep='first', inplace=False)参数- by:用于标识重复项的列名或列名列表。如果未指定,则使用所有列。- subset:与 by 类似,但用于指定列的子集。- keep:指定如何处理重复项。可以是:- first:保留第一个出现的重复项(默认值)。- last:保留最后一个出现的重复项。- False:删除所有重复项。- inplace:布尔值,指定是否在原地修改数据。如果为 True,则会修改原始数据;如果为 False,则返回一个新的删除重复项后的对象。
"""
def pd_df_drop():df = pd.DataFrame({'A':[1,2,2,3],'B':[4,5,5,6],'C':[7,8,8,9]})# 默认保留第一个出现的重复项df1 = df.drop_duplicates()print(df1)print()# last 保留最后一个出现的重复项df2 = df.drop_duplicates(keep='last')print(df2)

5、分组

1. groupby

groupby 方法用于对数据进行分组操作,这是数据分析中非常常见的一个步骤。通过 groupby,可以将数据集按照某个列(或多个列)的值分组,然后对每个组应用聚合函数,比如求和、平均值、最大值等。

"""
分组groupby()DataFrame.groupby(by, axis=0, level=None, as_index=True,sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)参数- by:用于分组的列名或列名列表。- axis:指定沿着哪个轴进行分组。默认为 0,表示按行分组。- level:用于分组的 MultiIndex 的级别。- as_index:布尔值,指定分组后索引是否保留。如果为 True,则分组列将成为结果的索引;如果为 False,则返回一个列包含分组信息的 DataFrame。- sort:布尔值,指定在分组操作中是否对数据进行排序。默认为 True。- group_keys:布尔值,指定是否在结果中添加组键。- squeeze:布尔值,如果为 True,并且分组结果返回一个元素,则返回该元素而不是单列 DataFrame。- observed:布尔值,如果为 True,则只考虑数据中出现的标签。
"""
def pd_df_groupby():data = {'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],'C': [1, 2, 3, 4, 5, 6, 7, 8],'D': [10, 20, 30, 40, 50, 60, 70, 80]}df = pd.DataFrame(data)grouped = df.groupby('A')print('分组')for name, group in grouped:print(f'name:{name}, group:\n{group}')# 根据A列分组后 求C列的平均值mean = df.groupby('A')['C'].mean()print('根据A列分组后 求C列的平均值')print(mean)# # 更易于存储的方式# # transform() 使用前后的数据类型应相同,否则会报错# mean = df.groupby('A')['C'].transform('mean')# print('更易于存储的方式')# print(mean)# print('存储在原df中')# df['group_mean'] = mean# print(df)mean = df.groupby('A')['C'].transform(lambda x:x.mean())print('更易于存储的方式')print(mean)df['group_mean'] = meanprint('存储在原df中')print(df)# df = pd.DataFrame({'A':[1,2,3],'B':[4,5,6]})# df1 = df.transform('sqrt')# print('开根号后的数据')# print(df1)
2. filter

通过 filter() 函数可以实现数据的筛选,该函数根据定义的条件过滤数据并返回一个新的数据集

"""
filter()实现数据的筛选,该函数根据定义的条件过滤数据并返回一个新的数据集
"""
def pd_df_fiter():data = {'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],'C': [1, 2, 3, 4, 5, 6, 7, 8],'D': [10, 20, 30, 40, 50, 60, 70, 80]}df = pd.DataFrame(data)# 按列 'A' 分组,并过滤掉列 'C' 的平均值小于 4 的组df2 =  df.groupby('A').filter(lambda x:x['C'].mean()>=4)print('filter筛选')print(df2)

6、合并

merge 函数用于将两个 DataFrame 对象根据一个或多个键进行合并,类似于 SQL 中的 JOIN 操作。这个方法非常适合用来基于某些共同字段将不同数据源的数据组合在一起,最后拼接成一个新的 DataFrame 数据表。

"""
合并merge()用于将两个 DataFrame 对象根据一个或多个键进行合并,类似于 SQL 中的 JOIN 操作- eft:左侧的 DataFrame 对象。- right:右侧的 DataFrame 对象。- how:合并方式,可以是 'inner'、'outer'、'left' 或 'right'。默认为 'inner'。- inner:内连接,返回两个 DataFrame 共有的键。- outer:外连接,返回两个 DataFrame 的所有键。- left:左连接,返回左侧 DataFrame 的所有键,以及右侧 DataFrame 匹配的键。- right:右连接,返回右侧 DataFrame 的所有键,以及左侧 DataFrame 匹配的键。- on:用于连接的列名。如果未指定,则使用两个 DataFrame 中相同的列名。
"""
def pd_df_merge():left = pd.DataFrame({'key':[1,2,3,4,5],'A':['a1','a2','a3','a4','a5'],'B':['b1','b2','b3','b4','b5']})right = pd.DataFrame({'key':[1,2,3,4,5],'C':['c1','c2','c3','c4','c5'],'D':['d1','d2','d3','d4','d5']})df = pd.merge(left, right, on='key')print(df)right = pd.DataFrame({'key':[1,2,3,4,6],'C':['c1','c2','c3','c4','c5'],'D':['d1','d2','d3','d4','d5']})# 左连接# 返回左侧 DataFrame 的所有键,以及右侧 DataFrame 匹配的键df1 = pd.merge(left, right, how='left')print(df1)# 右连接# 返回右侧 DataFrame 的所有键,以及左侧 DataFrame 匹配的键df2 = pd.merge(left, right, how='right')print(df2)

7、时间

from datetime import datetime as dt
1. datetime

datetime 模块提供了用于处理日期和时间的类。

def pd_df_datetime():datetime = dt.datetime(2024, 10, 25, 16, 6, 30)print(datetime)  # 2024-10-25 16:06:30print(datetime.date())  # 2024-10-25print(datetime.time())  # 16:06:30
2. Timestamp

Timestamp 是一个特殊的 datetime 类型,用于表示单个时间点。它是 pandas 时间序列功能的核心组件,提供了丰富的方法和属性来处理日期和时间数据。

    """Timestamp 是一个特殊的 datetime 类型,用于表示单个时间点。"""# 从日期字符串创建dt1 = pd.Timestamp('2024-10-25 16:16:30')print(dt1)  # 2024-10-25 16:16:30# 从时间戳创建dt2 = pd.Timestamp(1729844403)  # Unix 时间戳print(dt2)  
3. 日期解析

to_datetime() 方法用于将字符串或其他格式的日期转换为 Pandas 的 Datetime 对象。

def pd_df_to_datetime():date_str = '2023-10-25'date_obj = pd.to_datetime(date_str)print(date_obj)  # 2023-10-25 00:00:00
4.date_range

date_range() 函数用于生成一个固定频率的日期时间索引(DatetimeIndex)。这个函数非常灵活,可以用于生成各种时间序列数据。

    """date_range()用于生成一个固定频率的日期时间索引参数freq:- 类型:字符串或日期偏移对象,默认为 None。- 描述:时间频率。常见的频率包括 'D'(天)、'H'(小时)、'T' 或 'min'(分钟)、'S'(秒)等。"""# 生成从 2023-10-10 到 2023-10-20 的每日日期时间索引dt3 = pd.date_range(start='2023-10-10', end='2023-10-20', freq='D')print(dt3)# 生成从 2023-10-25 00:00:00 到 2023-10-25 23:00:00 的每小时日期时间索引dt4 = pd.date_range(start='2023-10-25',periods=24, freq='H')print(dt4)
5. 时间差

Timedelta 是一个用于表示时间间隔的对象。它可以表示两个时间点之间的差异,或者表示某个时间段的长度。Timedelta 对象可以用于时间序列分析、日期运算等场景。

# 使用字符串表示
td1 = pd.Timedelta('1 days 2 hours 30 minutes')
print(td1)  # 1 days 02:30:00# 使用参数
td2 = pd.Timedelta(days=1, hours=2, minutes=30)
print(td2)  # 1 days 02:30:00# 使用整数和单位
td3 = pd.Timedelta(5, unit='days')  # 5天
print(td3)  # 5 days 00:00:00# 时间差加减
td4 = pd.Timedelta('1 days 2 hours 30 minutes')
print(td4)  # 1 days 02:30:00td5 = pd.Timestamp('2024-01-01')
new_td = td4 + td5
print(new_td)  # 2024-01-02 02:30:00
6. 时间日期格式化

strftime 用于将日期时间对象转换为指定格式的字符串,而 strptime 用于将字符串解析为日期时间对象。

def pd_df_strtime():# 创建一个日期时间对象date_obj = dt(2023, 10, 1, 14, 30, 45)# 将日期时间对象转换为字符串date_str = date_obj.strftime("%Y-%m-%d %H:%M:%S")print(date_str)  # 2023-10-01 14:30:45# 将字符串解析为日期时间对象parsed_date_obj = dt.strptime(date_str, "%Y-%m-%d %H:%M:%S")print(parsed_date_obj)  # 2023-10-01 14:30:45

时间日期符号


http://www.mrgr.cn/news/58515.html

相关文章:

  • opencv - py_imgproc - py_geometric_transformations 几何变换
  • 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • 异次元v4.0
  • Nginx可视化管理工具 Nginx UI
  • 初识jsp
  • 【动手学电机驱动】 TI InstaSPIN-FOC(8)Lab07 在线测量定子电阻
  • 多态(作业篇)
  • python算法学习笔记之查找算法
  • 2:ARM 汇编语言2:二进制/十进制/十六进制
  • RBM HA联动VRRP三层主备案例
  • 从天边到身边,‘湘’遇北斗,‘株’多精彩
  • 状态栏黑底白字后如何实现圆角以及固定状态栏
  • golang的net包
  • vue2脚手架搭建项目流程
  • 3.1 机器学习--线性回归
  • JAVA基础-泛型
  • FineReport 多数据源报表
  • 搞fastjson总是惦记TemplatesImpl谁懂
  • SpingBoot原理
  • 线性表->链表(数据结构)
  • 在Android开发中WebView的详细使用方法
  • 【日常记录-Java】可变长度参数
  • 写导出接口的一些理解
  • lazada 商品详情 API 的获取与应用
  • python调用PIL库处理图片
  • JS轮播图实现自动轮播、悬浮停止轮播、点击切换,下方指示器与图片联动效果