Numpy数组中的Pandas DataFrame-列顺序

问题描述 投票:0回答:1

我正在尝试使用Pandas从.csv文件中读取数据,使用Savitsky-Golay过滤器对其进行平滑处理,对其进行过滤,然后再次使用Pandas编写输出csv文件。必须将数据从DataFrame转换为数组以进行平滑,然后再转换为DataFrame以创建输出文件。

[我找到了一个有关从numpy数组(Creating a Pandas DataFrame from a Numpy array: How do I specify the index column and column headers?)创建数据帧的主题,并且我使用了dataset = pd.DataFrame({'Column1': data[:, 0], 'Column2': data[:, 1]})行创建了我的数据库。

问题是,当我将列名重命名为第一列的'时间'和第二列的'角度'时,最终数据框中的顺序会更改。似乎字母顺序很重要,这似乎很奇怪。有人可以帮我一个解释吗?

我的完整代码:

import scipy as sp
from scipy import signal
import numpy as np

import pandas as pd
import matplotlib.pyplot as plt

# Specify the input file
in_file = '0_chunk0_test.csv'

# Define min and max angle values
alpha_min = 35
alpha_max = 45

# Define Savitsky-Golay filter parameters
window_length = 15
polyorder = 1

# Read input .csv file, but only time and pitch values using usecols argument
data = pd.read_csv(in_file,usecols=[0,2])

# Replace ":" with "" in time values
data['time'] = data['time'].str.replace(':','')

# Convert pandas dataframe to a numpy array, use .astype to convert
# string to float
data_arr = data.to_numpy(dtype=np.dtype,copy=True)
data_arr = data_arr.astype(np.float)

# Perform a Savitsky-Golay filtering with signal.savgol_filter
data_arr_smooth = signal.savgol_filter(data_arr[:,1],window_length,polyorder)

# Convert smoothed data array to dataframe and rename Pitch: to angle
data_fr = pd.DataFrame({'time': data_arr[:,0],'angle': data_arr_smooth})

print data_fr
arrays pandas numpy dataframe smoothing
1个回答
0
投票

如果您的数据已经在数据框中,则将Pitch列的值传递给savgol_filter会容易得多。

data_arr_smooth = signal.savgol_filter(data.Pitch, window_length, polyorder)
    
© www.soinside.com 2019 - 2024. All rights reserved.