Python for循环语法错误求助:第18行代码报SyntaxError
解决for循环嵌套在字典中的SyntaxError问题
咱们先拆解一下你遇到的语法错误:核心问题是你在DataFrame.append()的字典参数里错误地嵌套了循环结构,这完全不符合Python的语法规则,而且你的计算逻辑其实根本不需要逐行循环。
错误原因分析
你原本想计算每个CSV文件中Horiz_acc列相邻元素差值的绝对值之和,但错误地把row for row in range(0,len(df)):这种循环结构直接写在了字典内部——字典的语法要求是{key: value, key2: value2...},不能在里面插入循环语句。哪怕你把循环移到字典外面,依然会报错,因为append()方法接受的是单个字典/Series/DataFrame,不能直接跟循环代码。
修正方案
其实计算相邻元素差值的和,用Pandas内置的diff()函数就能高效完成,完全不需要手动逐行循环。下面是修正后的完整代码:
import pandas as pd import numpy as np import os b1_1_acc = pd.DataFrame([]) acc_cols = ['Hour','Minute','Second','mu_second','Horiz_acc','Vert_acc'] ### Set your path to the folder containing the .csv files PATH = 'C:\\Users\\UserName\\Documents\\python\\NASA\\FEMTOBearingDataSet\\Training_set\\Bearing1_1\\acc\\' # Use your path ### Fetch all files in path fileNames = os.listdir(PATH) ### Filter file name list for files ending with .csv fileNames = [file for file in fileNames if '.csv' in file] ### Loop over all files for file in fileNames: ### Read .csv file and append to list df = pd.read_csv(PATH + file, sep=',', header=None, names=acc_cols, index_col=None) # 用diff()计算相邻元素差值,dropna()去掉第一个NaN,再求和绝对值 horiz_line_integral = np.sum(abs(df['Horiz_acc'].diff().dropna())) # 直接传入合法字典给append() b1_1_acc = b1_1_acc.append({ 'Horiz_Line_Integral': horiz_line_integral # 这里可以注释掉你需要的其他特征,直接计算对应的scalar值即可 # 'Horiz_Mean': df['Horiz_acc'].mean(), # ...其他特征 }, ignore_index=True) b1_1_acc.head()
额外优化建议
Pandas的append()方法已经被标记为弃用(deprecated),如果你的Pandas版本比较新,建议用pd.concat()来替代,比如预先创建一个列表存储每个文件的结果字典,最后一次性合并:
# 初始化列表存储结果 result_list = [] for file in fileNames: df = pd.read_csv(PATH + file, sep=',', header=None, names=acc_cols, index_col=None) horiz_line_integral = np.sum(abs(df['Horiz_acc'].diff().dropna())) result_list.append({ 'Horiz_Line_Integral': horiz_line_integral # 其他特征... }) # 一次性合并成DataFrame b1_1_acc = pd.DataFrame(result_list) b1_1_acc.head()
这样不仅避免了弃用警告,效率也会更高哦。
内容的提问来源于stack exchange,提问作者sroverto
相关产品推荐
相关产品推荐

