为什么循环仅保存 pandas 中最后一个文件的结果
why loop saves only results from last file in pandas
我正在使用一个循环来打开连续的文件,然后使用第二个循环来计算特定行 nrs (x) 处的 y 平均值。为什么第二个循环只显示最后一个文件的平均值?我想将每个文件的平均值附加到一个新的数据框中。
path = '...../'
for file in os.listdir(path):
if file.endswith('.txt'):
with open(os.path.join(path, file)) as f:
df = pd.read_csv(f, sep="\t", header=0,usecols=[0,11])
df.columns = ["x", "y"]
average_PAR=[]
list=[]
for (x, y) in df.iteritems():
average_PAR = sum(y.iloc[49:350]) / len(y.iloc[49:350])
list.append(average_PAR)
print(list)
谢谢!
您的主要问题是缩进以及您没有将 df
保存到字典或列表中这一事实。
此外,您首先打开文件,然后将其传递给 pandas,没有必要这样做,因为 pandas 会为您处理 I/O
。
您的代码的简化版本是。
from pathlib import Path
import pandas as pd
dfs = {f.stem : pd.read_csv(f, sep="\t", header=0,usecols=[0,11])
for f in Path('.../').glob('*.txt')}
for each_csv, dataframe in dfs.items():
dataframe.iloc[35:450] # do stuff.
我正在使用一个循环来打开连续的文件,然后使用第二个循环来计算特定行 nrs (x) 处的 y 平均值。为什么第二个循环只显示最后一个文件的平均值?我想将每个文件的平均值附加到一个新的数据框中。
path = '...../'
for file in os.listdir(path):
if file.endswith('.txt'):
with open(os.path.join(path, file)) as f:
df = pd.read_csv(f, sep="\t", header=0,usecols=[0,11])
df.columns = ["x", "y"]
average_PAR=[]
list=[]
for (x, y) in df.iteritems():
average_PAR = sum(y.iloc[49:350]) / len(y.iloc[49:350])
list.append(average_PAR)
print(list)
谢谢!
您的主要问题是缩进以及您没有将 df
保存到字典或列表中这一事实。
此外,您首先打开文件,然后将其传递给 pandas,没有必要这样做,因为 pandas 会为您处理 I/O
。
您的代码的简化版本是。
from pathlib import Path
import pandas as pd
dfs = {f.stem : pd.read_csv(f, sep="\t", header=0,usecols=[0,11])
for f in Path('.../').glob('*.txt')}
for each_csv, dataframe in dfs.items():
dataframe.iloc[35:450] # do stuff.