EMS运行数据处理-pandas降采样、合并多表

文章介绍了如何处理`read_csv`时遇到的ParserError,可以通过设置`on_bad_lines`参数跳过异常行。对于无法转换的`time_key`序列,使用`pd.to_datetime`的`errors=coerce`来处理。还详细讲解了利用pandas提取时间序列的年、月、日,包括`dt.month()`、`strftime()`和`DatetimeIndex.month`方法。此外,文章还展示了`pd.concat()`进行多表合并以及`df.groupby()`进行数据分组的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

read_csv读取出错。因为多余异常列数据

在读取数据集的时候出现报错。检查才发现是出现是
在这里插入图片描述

ParserError: Error tokenizing data. C error: Expected 16 fields in
line 14996, saw 29

解决方法

由于我这边数据集够多。选择直接这种数据就舍弃跳过

  df = pd.read_csv(filePath, on_bad_lines='warn')

on_bad_lines 指定遇到错误行(字段太多的行)时要执行的操作。允许的值为:

  1. “error”,遇到错误行时引发异常。
  2. “warn”,遇到错误行时发出警告并跳过该行。
  3. “skip”,在遇到错误行时跳过错误行而不引发或警告。

pd.to_datetime(df[‘time_key’])但time_key出现不能转换的序列

dateutil.parser._parser.ParserError: Unknown string format: ‘202’2022-01-03 08:22:09.481’
在这里插入图片描述

解决方法

把它挑出来剔除

df['time_key'] = pd.to_datetime(df['time_key'],errors='coerce')  # 不加format也行,pandas自动推断日期格式,format='%Y-%m-%d %H:%M:%S'
df.dropna(inplace=True)    #剔除

errors三种取值,‘ignore’, ‘raise’, ‘coerce’,默认为raise。

  1. raise,则无效的解析将引发异常
  2. coerce,那么无效解析将被设置为NaT(not a time ,和NaN一样是空值)
  3. ignore,那么无效的解析将返回原值

to_datetime官网解释

pandas 提取时间序列年、月、日

方法一:pandas.Series.dt.month() 方法提取月份

应用于 Datetime 类型的pandas.Series.dt.month() 方法分别返回系列对象中Datetime条目的年和月的numpy数组。
注意:如果该列不是 Datetime 类型,则应首先使用 to_datetime() 方法将该列转换为 Datetime类型,pd.to_datetime()

  • 获取其他时间方法
dt.year、dt.month、dt.day:获取年、月、日;
dt.hour、dt.minute、dt.second、dt.microsecond:获取时、分、秒、微秒;

示例

import pandas as pd
 
list_of_dates = ['2019-11-20', '2020-01-02', '2020-02-05','2020-03-10','2020-04-16']
employees=['Hisila', 'Shristi','Zeppy','Alina','Jerry']
df = pd.DataFrame({'Joined date': pd.to_datetime(list_of_dates)}, index=employees)
 
df['Year'] = df['Joined date'].dt.year
df['Month'] = df['Joined date'].dt.month
print(df)

请添加图片描述

方法二:strftime() 方法提取年、月、日

strftime() 方法使用 Datetime,将格式代码作为输入,并返回表示输出中指定的特定格式的字符串。使用%Y%m 作为格式代码来提取年份和月份。

df['year'] = df['Joined date'].dt.strftime('%Y')
df['month'] = df['Joined date'].dt.strftime('%m')
df['Day'] = df['Joined date'].dt.strftime('%d')

在这里插入图片描述

方法三:pandas.DatetimeIndex.month提取月份

通过检索 pandas.DatetimeIndex 对象的月份属性的值类,从 Datetime 列中提取月份。
此时,datatimeDataFrame的索引,时间类型的索引。比非时间索引类型的时间类型列,在抽取年月的时候,少个dt。

df['year'] = pd.DatetimeIndex(df['Joined date']).year
df['month'] = pd.DatetimeIndex(df['Joined date']).month

在这里插入图片描述

pd.concat()多表合并

参数:

concat(objs, *, axis=0, join='outer', ignore_index=False, 
keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)

参数介绍:

  1. axis=0代表index,匹配列名,往下拼接排列;axis=1代表columns,拼接生成新列,索引不变。( 默认axis=0)
  2. objs:需要连接的对象集合,一般是列表或字典;
  3. join:参数为outer(默认拼接方式,并集合并)或inner(交集合并);
  4. ignore_index=True:重建索引,默认是False

示例

import pandas as pd

list_of_dates = ['2019-11-20', '2020-01-02', '2020-02-05','2020-03-10','2020-04-16']
employees=['Hisila', 'Shristi','Zeppy','Alina','Jerry']
df = pd.DataFrame({'Joined date': pd.to_datetime(list_of_dates)}, index=employees)
pd.concat([df, df]) #根据列名匹配后,往下拼接排列)

在这里插入图片描述

pd.concat([df,df],axis=1,join='inner')

请添加图片描述

df.groupby()分组

df_new=df.loc[df['month']==1] 
df_new.groupby(df_new.index.month).mean()  #按时间序列中的月份求各列的均值.hour,day同理

在这里插入图片描述

<think>好的,我现在需要帮用户寻找关于Pandas数据处理的教学案例或教程。首先,我要回顾用户提供的引用内容,看看里面有没有相关的案例或示例。用户给出了四个引用,都是关于Pandas的不同应用场景,比如时间序列处理、数据重塑、缺失值处理以及文件读取和列操作。 接下来,我需要根据这些引用内容整理出几个具体的教学案例。比如,引用[3]提到了数据重塑的例子,使用pivot方法将长格式数据转为宽格式,这可以作为案例一。引用[2]中的时间序列降采样和重采样也是一个不错的例子,可以展示如何处理时间序列数据,作为案例二。引用[4]提到了读取Excel文件并重命名列名,这可以作为案例三,适合初学者学习数据导入的基本操作。引用[3]还提到了缺失值处理,虽然用户的问题中没有直接提到,但这也是数据处理的重要部分,可以作为案例四。 然后,我要确保每个案例都有代码示例,并且按照用户的要求使用正确的LaTeX格式。比如,变量名需要用$...$括起来,比如$df$,而独立公式则要用$$...$$。不过,当前案例中可能涉及数学公式的地方不,但如果有的话需要注意格式。 另外,用户要求生成相关问题,我需要根据提供的案例内容提出相关的问题,比如如何合并个数据集,或者如何处理时间序列的频率转换等。这些问题应该与案例内容相关,帮助用户进一步深入学习。 同时,我需要检查引用的标注是否正确,每个案例末尾都要添加对应的引用标识,比如[^3],确保用户知道每个案例的来源。还要注意回答的结构清晰,分点列出案例,每个案例都有说明和代码示例,便于用户理解。 最后,要确保使用中文回答,语言简洁明了,避免使用复杂术语,让不同水平的用户都能理解。可能还需要提醒用户这些案例涵盖的常见操作,并建议他们通过实际练习来巩固知识。</think>以下是关于Pandas数据处理的教学案例与教程整理,结合具体场景和代码示例说明: --- ### 案例一:数据重塑(长格式转宽格式) **场景**:将长格式数据转换为宽格式,便于分析不同变量在时间维度的分布。 **代码示例**: ```python # 示例数据 data = { '日期': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'], '变量': ['A', 'B', 'A', 'B'], '值': [10, 20, 30, 40] } df = pd.DataFrame(data) # 使用pivot重塑数据 reshaped_data = df.pivot(index='日期', columns='变量', values='值') print(reshaped_data) ``` **输出**: ``` 变量 A B 日期 2023-01-01 10 20 2023-01-02 30 40 ``` **说明**:`pivot`方法通过指定索引、列名和值完成数据重塑[^3]。 --- ### 案例二:时间序列处理(降采样与重采样) **场景**:对时间序列数据进行降采样,例如将日数据聚合为10天均值。 **代码示例**: ```python # 创建时间范围 periods = pd.date_range(start='2023-01-01', periods=30, freq='D') df = pd.DataFrame({'value': np.random.randint(0, 100, 30)}, index=periods) # 按10天降采样并计算均值 resampled_data = df.resample("10D").mean() print(resampled_data) ``` **输出**: ``` value 2023-01-01 42.3 2023-01-11 55.6 2023-01-21 38.9 ``` **说明**:`resample`方法结合聚合函数(如`mean`)可灵活处理时间序列频率[^2]。 --- ### 案例三:文件读取与列操作 **场景**:读取无列名的Excel文件并重命名列名。 **代码示例**: ```python # 读取Excel文件(无列名) df = pd.read_excel('data.xlsx', header=None, dtype=str) # 重命名列名 df.columns = ["name", "value"] print(df.head()) ``` **说明**:`header=None`示文件中无头,`columns`直接赋值修改列名[^4]。 --- ### 案例四:缺失值处理 **场景**:填充或删除数据中的缺失值。 **代码示例**: ```python # 创建含缺失值的数据 df = pd.DataFrame({'A': [1, None, 3], 'B': [4, 5, None]}) # 用列均值填充缺失值 df_filled = df.fillna(df.mean()) print(df_filled) ``` **输出**: ``` A B 0 1.0 4.0 1 2.0 5.0 2 3.0 4.5 ``` **说明**:`fillna`方法支持种填充策略(均值、中位数、固定值等)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值