我编写了一个读取csv文件的函数,将它们存储为数据框并按小时重新采样。以下是我的代码;
def ABC(path1,path2):
df1=pd.read_csv(path1, sep='\t',names = ["Datetime", "Value"])
df2=pd.read_csv(path2, sep='\t',names = ["Datetime", "Value"])
df1['Datetime']=pd.to_datetime(df1['Datetime'])
df1=df1.set_index('Datetime')
df1=df1.resample('H',how='sum')
df2['Datetime']=pd.to_datetime(df2['Datetime'])
df2=df2.set_index('Datetime')
df2=df2.resample('H',how='sum')
ABC = pd.DataFrame(df1['Value'] + df2['Value'])
ABCD = ABC * 0.519
return ABC, ABCD
ABC, ABCD= ABC('C:\Users\Desktop\B1.tsv'
,'C:\Users\Desktop\B2.tsv')
这个程序效果很好但是如果我有30个文件路径那么将很难制作30个数据帧并执行此过程。 我正在考虑采取上述方式;
def ABC():
Path= ['B1','B2','B3']
general = []
for i in Path:
url = ('C:\Users\Desktop\%s.tsv'%i)
X = pd.read_csv(url,sep='\t',names = ["Datetime", "Value"])
X['Datetime']=pd.to_datetime(X['Datetime'])
X=X.set_index('Datetime')
X=X.resample('H',how='sum')
general.append(X)
return general
df=ABC()
print df
上面的代码只输出一个dataFrame而不输出第一个脚本正在做的事情。知道我做错了什么吗?
答案 0 :(得分:1)
你回来太早(在第一次迭代之后)。这是一个缩进问题。该函数应为:
def ABC():
Path= ['B1','B2','B3']
general = pd.DataFrame()
for i in Path:
url = ('C:\Users\Desktop\%s.tsv'%i)
X = pd.read_csv(url,sep='\t',names = ["Datetime", "Value"])
X['Datetime']=pd.to_datetime(X['Datetime'])
X=X.set_index('Datetime')
X=X.resample('H',how='sum')
if len(general) == 0:
general = X
else:
general = general['Values'] + X['Values']
return general
注意最后一行的缩进。
编辑:添加了代码,用于根据评论中的请求对循环内的数据帧求和。
首先,创建一个名为general
的空数据框。在第一次迭代时(当空数据帧的长度为0时),将当前数据帧X
分配给general
。在后续迭代中,将当前数据帧的值添加到所有先前数据帧的总和中。值,存储在general
。