如何使用.iloc读取时间序列
时间: 2023-05-28 13:08:15 浏览: 76
要使用.iloc读取时间序列,需要先将时间序列转换为pandas DataFrame对象。以下是一个示例代码:
```
import pandas as pd
import numpy as np
# 创建一个时间序列
dates = pd.date_range('20200101', periods=10)
# 创建一个DataFrame对象
df = pd.DataFrame(np.random.randn(10, 4), index=dates, columns=['A', 'B', 'C', 'D'])
# 使用.iloc读取第一个行和第一个列
print(df.iloc[0, 0])
```
在上述代码中,我们首先使用pandas.date_range()函数创建了一个时间序列。然后,我们使用pandas.DataFrame()函数将该时间序列转换为一个DataFrame对象。最后,我们使用.iloc[]方法读取第一个行和第一个列的值。
注意,.iloc[]方法的参数是整数型的索引,而不是日期型的索引。因此,在使用.iloc[]方法读取时间序列时,需要先将日期型的索引转换为整数型的索引。
相关问题
# 读取Excel文件 data = pd.read_excel('./处理过的训练集/984151.xlsx') # 提取第一列第二行以后的数据 samples = data.iloc[1:, 0].tolist() # 假设数据共有N个点,采样周期为0.25秒 N = len(samples) t = np.arange(N) * 0.25 #组合时间序列和采样值 data = np.column_stack((t, samples))要求把这组数据变为离散型
如果你想将这个二维矩阵变为离散的数据,可以对采样数据进行离散化处理,将连续的数值转化为离散的类别。离散化可以使用上面提到的等宽离散化、等频离散化或聚类离散化等方法。
下面是一个使用等宽离散化的示例代码:
``` python
import numpy as np
import pandas as pd
# 读取Excel文件
data = pd.read_excel('./处理过的训练集/984151.xlsx')
# 提取第一列第二行以后的数据
samples = data.iloc[1:, 0].tolist()
# 将采样数据等宽离散化为10个类别
labels = pd.cut(samples, bins=10, labels=False)
# 组合时间序列和离散化后的采样数据
N = len(samples)
t = np.arange(N) * 0.25
data = np.column_stack((t, labels))
print(data[:10]) # 打印前10行数据
```
上述代码中,使用pd.cut()函数对采样数据进行等宽离散化,将采样数据分为10个类别,并将每个类别用一个整数标识。然后将离散化后的采样数据和时间序列组合成一个二维矩阵。最终得到的data是一个二维矩阵,第一列是时间序列,第二列是离散化后的采样数据。
import numpy as np import pandas as pd import matplotlib.pyplot as plt import pyhht # 读取csv文件数据 data = pd.read_csv('77.csv', header=None) time = data.iloc[:, 0].values charge = data.iloc[:, 1].values # EMD分解 decomposer = pyhht.EMD(charge) imfs = decomposer.decompose() # 绘制原始序列和分解后的IMF分量 plt.figure(figsize=(10, 6)) plt.plot(time, charge, label='Original') plt.xlabel('Time') plt.ylabel('Charge') plt.legend() plt.show() for i in range(imfs.shape[0]): plt.plot(time, imfs[i], label=f'IMF{i+1}') plt.xlabel('Time') plt.ylabel('Charge') plt.legend() plt.show() residuals = charge - np.sum(imfs, axis=0) plt.plot(time, residuals, label='Residuals') plt.xlabel('Time') plt.ylabel('Charge') plt.legend() plt.show()在上述代码后增写一段代码,使得上述代码中绘制的图片可以显示在一张图中
可以使用 subplots() 方法将多个图像显示在同一个图中。以下是修改后的代码:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pyhht
# 读取csv文件数据
data = pd.read_csv('77.csv', header=None)
time = data.iloc[:, 0].values
charge = data.iloc[:, 1].values
# EMD分解
decomposer = pyhht.EMD(charge)
imfs = decomposer.decompose()
# 绘制原始序列和分解后的IMF分量
fig, axs = plt.subplots(nrows=imfs.shape[0]+1, ncols=1, figsize=(10, 10))
axs[0].plot(time, charge, label='Original')
axs[0].set_xlabel('Time')
axs[0].set_ylabel('Charge')
axs[0].legend()
for i in range(imfs.shape[0]):
axs[i+1].plot(time, imfs[i], label=f'IMF{i+1}')
axs[i+1].set_xlabel('Time')
axs[i+1].set_ylabel('Charge')
axs[i+1].legend()
plt.tight_layout()
plt.show()
residuals = charge - np.sum(imfs, axis=0)
plt.plot(time, residuals, label='Residuals')
plt.xlabel('Time')
plt.ylabel('Charge')
plt.legend()
plt.show()
```
这样就可以将每个 IMF 和原始信号一起显示在同一个图中。`tight_layout()` 方法可以自动调整子图之间的间距,使它们更紧凑。