You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:47:55