“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 開頭的證券代碼。
浙公網安備 33010602011771號