“Pandas 提供了强大的日期时间处理功能,从字符串到时间戳的转换、时区调整到格式化输出,都可以轻松实现。此外,字符串操作如替换、分割、过滤等,也能通过 str 访问器高效完成。”


1. 日期和时间

1.1. ​将字符串转换为日期时间格式

如果时间或日期数据是字符串格式,可以使用 pd.to_datetime() 函数将其转换为 Pandas 的 datetime 类型。

import pandas as pd

# 示例数据
data = {'date': ['2023-01-01', '2023-02-01', '2023-03-01']}
df = pd.DataFrame(data)

# 将 'date' 列转换为 datetime 类型
df['date'] = pd.to_datetime(df['date'])
print(df)

输出:

        date
0 2023-01-01
1 2023-02-01
2 2023-03-01

参数说明:

  • format:指定日期字符串的格式,例如 '%Y-%m-%d'。
  • errors:处理错误的方式,'raise'(报错)、'coerce'(将无效值转换为 NaT)、'ignore'(保留原值)。
  • unit:指定时间单位,如 's'(秒)、'ms'(毫秒)。

1.2. ​处理多种日期格式

如果日期字符串有多种格式,可以通过 errors='coerce' 参数忽略无法解析的日期,或者使用 format 参数指定格式。

data = {'date': ['2023-01-01', '01/02/2023', 'March 3, 2023']}
df = pd.DataFrame(data)

# 处理多种日期格式
df['date'] = pd.to_datetime(df['date'], errors='coerce')
print(df)

输出:

        date
0 2023-01-01
1 2023-01-02
2 2023-03-03

1.3. ​从时间戳转换

如果数据是时间戳(如 Unix 时间戳),可以使用 pd.to_datetime() 将其转换为 datetime 类型。

示例:

data = {'timestamp': [1672531199, 1672617599, 1672703999]}
df = pd.DataFrame(data)

# 将时间戳转换为 datetime
df['date'] = pd.to_datetime(df['timestamp'], unit='s')
print(df)

输出:

   timestamp                date
0  1672531199 2023-01-01 00:00:00
1  1672617599 2023-01-02 00:00:00
2  1672703999 2023-01-03 00:00:00

1.4. ​提取日期时间信息

转换后,可以使用 dt 访问器提取日期时间的各个部分,如年、月、日、小时等。

示例:

df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
print(df)

输出:

                date  year  month  day
0 2023-01-01 00:00:00  2023      1    1
1 2023-01-02 00:00:00  2023      1    2
2 2023-01-03 00:00:00  2023      1    3

1.5. ​处理时区信息

如果数据包含时区信息,可以使用 tz_convert() 和 tz_localize() 进行时区转换。

示例:

# 添加时区信息
df['date'] = pd.to_datetime(df['date']).dt.tz_localize('UTC')
# 转换为本地时区
df['date'] = df['date'].dt.tz_convert('Asia/Shanghai')
print(df)

1.6. ​将日期时间转换为字符串

如果需要将 datetime 类型转换为特定格式的字符串,可以使用 dt.strftime()。

示例:

df['date_str'] = df['date'].dt.strftime('%Y-%m-%d %H:%M:%S')
print(df)

输出:

                date           date_str
0 2023-01-01 08:00:00  2023-01-01 08:00:00
1 2023-01-02 08:00:00  2023-01-02 08:00:00
2 2023-01-03 08:00:00  2023-01-03 08:00:00

2. 字符串操作

2.1. DataFrame 的字符串操作

在 Pandas 中,DataFrame 的字符串操作可以通过 str 访问器来实现。以下是一些常见的字符串操作方法:


2.1.1. 转换为大写或小写

df['column_name'] = df['column_name'].str.upper()  # 转换为大写
df['column_name'] = df['column_name'].str.lower()  # 转换为小写

2.1.2. 替换子字符串

df['column_name'] = df['column_name'].str.replace('old', 'new')  # 替换子字符串

2.1.3. 提取子字符串

df['new_column'] = df['column_name'].str[:3]  # 提取前 3 个字符

2.1.4. 分割字符串

df[['part1', 'part2']] = df['column_name'].str.split(' ', expand=True)  # 按空格分割

2.1.5. 检查是否包含子字符串

df['contains_substring'] = df['column_name'].str.contains('substring')  # 检查是否包含

2.1.6. 计算字符串长度

df['length'] = df['column_name'].str.len()  # 计算字符串长度

2.1.7. 去除空格

df['column_name'] = df['column_name'].str.strip()  # 去除两端空格

2.1.8. 正则表达式匹配

df['matches'] = df['column_name'].str.contains(r'\d')  # 检查是否包含数字

2.2. 排除科创板证券

科创板证券的代码通常以 688 开头。假设 DataFrame 中有一列 code 存放证券代码,可以通过以下方法排除科创板证券:

方法 1:使用 ~ 和 str.startswith()

df_filtered = df[~df['code'].str.startswith('688')]

方法 2:使用 str.contains() 和正则表达式

df_filtered = df[~df['code'].str.contains(r'^688')]

方法 3:使用 query() 方法

df_filtered = df.query("not code.str.startswith('688')", engine='python')

示例:

import pandas as pd

# 示例数据
data = {'code': ['600001', '688001', '000001', '688002'], 'name': ['A', 'B', 'C', 'D']}
df = pd.DataFrame(data)

# 排除科创板
df_filtered = df[~df['code'].str.startswith('688')]
print(df_filtered)

输出:

     code name
0  600001    A
2  000001    C

Notes
- 字符串操作:通过 str 访问器可以实现大小写转换、替换、提取、分割、检查等操作。
- 排除科创板:使用 str.startswith() 或正则表达式过滤掉以 688 开头的证券代码。

posted on 2025-09-19 17:18  Martinl_it  阅读(9)  评论(0)    收藏  举报