Python数据分析 Pandas进阶(下) 这篇就够了

建议先看我写的 Pandas快速入门 和 Pandas进阶 (上)、(中) ,这样方便理解接下来的内容

入门篇

Python数据分析 Pandas快速入门至进阶这篇就够了_python pandas-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_69183322/article/details/135891946进阶篇
Python数据分析 Pandas进阶(上) 这篇就够了-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_69183322/article/details/135913014Python数据分析 Pandas进阶(中) 这篇就够了-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_69183322/article/details/135936599

 一、日期数据处理

1.1 转换为指定的日期格式

使用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

 

1.2 一组数据组合为日期数据

示例:

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

1.3 dt对象的使用

# 导入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 

1.4 不同时期统计并显示数据

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()

1.5 时期显示数据

通过resample方法获取到时期后,使用to_period方法将所获取到的时期的数据进行显示

从日期中获取不同的时期

年数据显示:

df.to_period('A')

季度数据显示: 

df.to_period('Q')

月数据显示:

df.to_period('M')

星期数据显示:

 df.to_period('W')

二、时间序列

resample方法前面已经介绍了简单的使用方法

时间序列通过resample方法进行重采样、降采样、升采样处理

2.1 ohlc函数 时间序列数据汇总

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

2.2 rolling函数 移动窗口数据计算

示例:

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方法将数据合并

3.1 merge示例

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

3.2 concat示例

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页

4.1 使用to_excel方法

示例:

df.to_excel('result_data.xlsx')

4.2 导出是.csv后缀的文件

使用to_csv方法

df.to_csv('result_data.csv')

4.3 导出的数据写入到文件

部分示例

df1.to_excel('df1.xlsx')
work=pd.ExcelWriter('df2.xlsx')
df1.to_excel(work,sheet_name='df2')
work.save()

你可能感兴趣的:(pandas)