建议先看我写的 Pandas快速入门 和 Pandas进阶 (上)、(中) ,这样方便理解接下来的内容
入门篇
Python数据分析 Pandas快速入门至进阶这篇就够了_python pandas-CSDN博客https://blog.csdn.net/qq_69183322/article/details/135891946进阶篇
Python数据分析 Pandas进阶(上) 这篇就够了-CSDN博客https://blog.csdn.net/qq_69183322/article/details/135913014Python数据分析 Pandas进阶(中) 这篇就够了-CSDN博客https://blog.csdn.net/qq_69183322/article/details/135936599
使用to_datetime批量日期数据转换
示例:
import pandas as pd
from datetime import datetime
# 创建一个包含日期字符串的DataFrame
data = {
'date1': ['20230706', '2023/07/17', '2023.07.18'],
'date2': ['20230715', '2023.07.16', '2023/07/17']
}
df = pd.DataFrame(data)
# 使用to_datetime函数将'date1'和'date2'列转换为日期格式
# 注意:to_datetime函数默认将字符串解析为日期,但有时可能需要指定格式
# 在这种情况下,我们可以使用format参数来指定日期的格式
df[['date1', 'date2']] = df[['date1', 'date2']].apply(pd.to_datetime, format='%Y-%m-%d')
# 输出转换后的DataFrame
print(df)
运行结果:
date1 date2
0 2023-07-06 2023-07-15
1 2023-07-17 2023-07-16
2 2023-07-18 2023-07-17
示例:
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
df = pd.DataFrame({'year':[2024,2023,2002],
'month':[1,3,5],
'day':[5,3,22],
'hour':[2,13,11],
'minute':[34,22,34],
'second':[4,6,7]})
df['组合的日期'] = pd.to_datetime(df)
print(df)
运行结果:
year month day hour minute second 组合的日期
0 2024 1 5 2 34 4 2024-01-05 02:34:04
1 2023 3 3 13 22 6 2023-03-03 13:22:06
2 2002 5 22 11 34 7 2002-05-22 11:34:07
# 导入pandas库,并为其设置别名pd
import pandas as pd
# 设置pandas的显示选项,以解决中文字符在输出时可能出现的对齐问题
pd.set_option('display.unicode.east_asian_width', True)
# 创建一个名为df的DataFrame,其中包含一个名为'原日期'的列,其数据类型为字符串
df = pd.DataFrame({'原日期': ['2024.1.25', '2024.2.13', '2024.3.15', '2024.6.25', '2024.9.25', '2024.11.21']})
# 使用pd.to_datetime函数将'原日期'列中的字符串转换为日期格式,并将结果存储在新的'日期'列中
df['日期'] = pd.to_datetime(df['原日期'])
# 打印转换后的df,此时应能正常显示日期数据
print(df)
# 使用dt属性来提取日期中的年、月、日部分,并将它们分别存储在新的列中
df['年'], df['月'], df['日'] = df['日期'].dt.year, df['日期'].dt.month, df['日期'].dt.day
# 使用dt属性来提取日期中的星期几部分,并将结果存储在新的列中
df['星期几'] = df['日期'].dt.day_name()
# 使用dt属性来提取日期中的季度部分,并将结果存储在新的列中
df['季度'] = df['日期'].dt.quarter
# 使用dt属性来检查每个日期是否为年底,并将结果存储在新的列中
df['是否年底'] = df['日期'].dt.is_year_end
# 打印更新后的df,此时应包含年、月、日、星期几、季度和是否年底等列
print(df)
运行代码:
原日期 日期
0 2024.1.25 2024-01-25
1 2024.2.13 2024-02-13
2 2024.3.15 2024-03-15
3 2024.6.25 2024-06-25
4 2024.9.25 2024-09-25
5 2024.11.21 2024-11-21
原日期 日期 年 月 日 星期几 季度 是否年底
0 2024.1.25 2024-01-25 2024 1 25 Thursday 1 False
1 2024.2.13 2024-02-13 2024 2 13 Tuesday 1 False
2 2024.3.15 2024-03-15 2024 3 15 Friday 1 False
3 2024.6.25 2024-06-25 2024 6 25 Tuesday 2 False
4 2024.9.25 2024-09-25 2024 9 25 Wednesday 3 False
5 2024.11.21 2024-11-21 2024 11 21 Thursday 4 False
resample方法获取日期计算
使用前需要将时间设置为索引
df = df.set_index('订单付款时间') # 将date设置为index
年统计数据:
df = df.resample('AS').sum()
季度统计数据:
df.resample('Q').sum()
月度统计数据:
df.resample('M').sum()
星期统计数据:
df.resample('W').sum()
天统计数据:
df.resample('D').sum()
通过resample方法获取到时期后,使用to_period方法将所获取到的时期的数据进行显示
从日期中获取不同的时期
年数据显示:
df.to_period('A')
季度数据显示:
df.to_period('Q')
月数据显示:
df.to_period('M')
星期数据显示:
df.to_period('W')
resample方法前面已经介绍了简单的使用方法
时间序列通过resample方法进行重采样、降采样、升采样处理
OHLC(Open, High, Low, Close)函数通常用于时间序列数据的汇总,它用于计算一个时间段内的开盘价、最高价、最低价和收盘价。
示例代码:
import pandas as pd
import numpy as np
# 创建一个包含时间序列数据的数据框
df = pd.DataFrame({
'timestamp': pd.date_range(start='2023-01-01', end='2023-01-10'),
'open': np.random.randint(100, 200, 10),
'close': np.random.randint(100, 200, 10)
})
# 将时间列设置为索引
df.set_index('timestamp', inplace=True)
# 使用resample方法进行重采样,并计算开盘价和收盘价的平均值作为OHLC值
df['open'] = df['open'].resample('D').mean() # 'D' 表示每天
df['close'] = df['close'].resample('D').mean() # 'D' 表示每天
df['high'] = df['open'].where(df['open'] < df['close'], df['close']) # 最高价为开盘价和收盘价中的较小值
df['low'] = df['open'].where(df['open'] > df['close'], df['close']) # 最低价为开盘价和收盘价中的较大值
print(df)
运行结果:
open close high low
timestamp
2023-01-01 143.0 187.0 143.0 187.0
2023-01-02 184.0 108.0 108.0 184.0
2023-01-03 166.0 178.0 166.0 178.0
2023-01-04 140.0 174.0 140.0 174.0
2023-01-05 176.0 149.0 149.0 176.0
2023-01-06 122.0 192.0 122.0 192.0
2023-01-07 183.0 149.0 149.0 183.0
2023-01-08 130.0 150.0 130.0 150.0
2023-01-09 131.0 169.0 131.0 169.0
2023-01-10 128.0 112.0 112.0 128.0
示例:
import pandas as pd
# 创建一个包含时间序列数据的数据框
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'B': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
})
# 在数据框上定义滚动窗口,窗口大小为3
rolling_window = df.rolling(window=3)
# 使用mean函数计算每个窗口内的平均值
result = rolling_window.mean()
print(result)
运行结果:
A B
0 NaN NaN
1 NaN NaN
2 2.0 20.0
3 3.0 30.0
4 4.0 40.0
5 5.0 50.0
6 6.0 60.0
7 7.0 70.0
8 8.0 80.0
9 9.0 90.0
使用merge和concat方法将数据合并
import pandas as pd
# 创建两个示例 DataFrame
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D', 'E'],
'value2': [5, 6, 7, 8]})
# 使用 merge 方法按 'key' 列合并两个 DataFrame
merged_df = pd.merge(df1, df2, on='key')
# 显示合并后的 DataFrame
print(merged_df)
运行结果:
key value1 value2
0 B 2 5
1 C 3 6
2 D 4 7
import pandas as pd
# 创建两个示例 DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2'],
'C': ['C0', 'C1', 'C2'],
'D': ['D0', 'D1', 'D2']},
index=[0, 1, 2])
df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5'],
'C': ['C3', 'C4', 'C5'],
'D': ['D3', 'D4', 'D5']},
index=[3, 4, 5])
# 使用 concat 方法将两个 DataFrame 沿着行方向连接在一起
result = pd.concat([df1, df2])
# 显示连接后的 DataFrame
print(result)
运行结果:
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 A4 B4 C4 D4
5 A5 B5 C5 D5
导出是.xlsx后缀的文件
可以通过sheet_name指定导出的sheet页
示例:
df.to_excel('result_data.xlsx')
使用to_csv方法
df.to_csv('result_data.csv')
部分示例
df1.to_excel('df1.xlsx')
work=pd.ExcelWriter('df2.xlsx')
df1.to_excel(work,sheet_name='df2')
work.save()