Python 数据处理
数据的读取与保存
当路径或文件中包含中文时,需要额外指定 engine 为 python
import pandas as pd
data = pd.read_csv(data_path, sep=' ', header=None)
data.to_csv(rlt_path, header=0, index=0, sep=' ')
data = pd.read_csv(data_path, engine='python')
DataFrame 按列差分
只对于 Series 和 DataFrame 存在这个函数。对于 ndarray 可以先转成 Series 或 DataFrame 再进行处理。
d_vel = abs(data.diff()).fillna(method='bfill')
数据插值
interp1d 函数通过传入的横纵坐标数据拟合并返回一个函数。这个函数可以接受一个序列作为输入,并返回相应大小的拟合插值。
from scipy.interpolate import interp1d
function = interp1d(range(N), data[i], kind='quadratic') # interp1d(x, y) 一维插值
fdata = function(np.linspace(0, N-1, INSERT_N * N))
这个函数只能对给定值范围内的点进行插值,如果需要预测的点超过范围将返回 ValueError 异常。此时可以使用 interp 函数。
from scipy import interp, arange, exp
x = arange(0, 10)
y = exp(-x/3.0)
interp([9, 10], x, y)
# array([0.04978707, 0.04978707])
不过该函数只是将超过范围的预测值赋值为边缘的两个值。如果需要更复杂的要求,可以通过自行编写函数实现。
中值滤波
用该点周围指定范围内的值的中位数来代替该点的值
import scipy.signal as signal
x_med = signal.medfilt(x, 3) # 核为3
分位数计算
percentile 函数根据传入的数据,给出对应 25%、50%和75%的分位数
import numpy as np
per = np.percentile(x, [25, 50, 75])
对数组前 k 个极值划分
argpartition 函数根据传入的数据,对数组中的元素值进行划分,并返回划分之后对应元素的下标
import numpy as np
index = np.argpartition(arr, -3) # 返回数组中后 3 位存放最大的 3 个元素
idx = index[-3:] # 取得最大 3 个数的下标
离散信号的极值点
import scipy.signal as signal
extreme_geater = signal.argrelextrema(data, np.greater) # 给出的是位置标号
extreme_less = signal.argrelextrema(data, np.less)
绘图使用两个独立的坐标轴
import matplotlib.pyplot as plt
plt.figure()
ax1 = plt.subplot(111)
ax1.plot(range(N), f_data[12])
ax2 = ax1.twinx() # 独立两个y轴,x轴用twiny()
ax2.plot(range(N), data[12])