我希望能够收集共享一个共同索引和时间t
的CSV文件集合,并且我希望使用一个名为mergedf()
的函数将它们合并在一起。它看起来像它工作,除了它打印相同的值3次。似乎它基于我的filepath[0]
语句打印if
3次。此外,它还可以是intdf
函数中的prepdf()
。
如果你能帮助我发现我的错误,那就太棒了。
在
def prepdf(path, mi, ma):
csv = pd.read_csv(path, usecols=[0,1], skiprows=1, names = ['t','b'])
df = DataFrame(csv)
fs = 2
T = 1/fs
ts = np.arange(mi, ma, T)
interpdata = {}
for key in ['b']:
spl = interpolate.interp1d(df['t'], df[key])
interpdata[key] = spl(ts)
interpframe = pd.DataFrame(interpdata, index=ts)
interpframe.index.name = 'ts'
interpframe.reset_index(inplace=True)
interpframe['t'] = interpframe['ts']
temp = interpframe.loc[interpframe['b'] > 0.5, 't']
interpframe.loc[interpframe['b'] > 0.5, 't'] = temp
interpframe['t'] = interpframe['t'].fillna(method='ffill')
interpframe.set_index('t', inplace=True)
inttmp = interp_frame
intdf = interp_frame.head(n=len(inttmp))
return intdf
PATHS = ['data1.csv', 'data2.csv', 'data3.csv']
filepath = [file for file in PATHS]
for path in PATHS:
df = prepdf(path, 650, 1000)
print(df)
print(len(PATHS))
def mergedf(n):
if len(PATHS)-1-n == 0:
return prepdf(filepath[0], 650, 1000)
else:
return pd.merge(prepdf(filepath[len(PATHS)-1-n], 650, 1000), mergedf(n+1), left_on='t', right_on='t')
mergedf(0)
出(mergedf(0)):
t b b_x b_y
0 650.0 0.105299 0.105299 0.105299
1 650.5 0.193072 0.193072 0.193072
2 651.0 0.115404 0.115404 0.115404
3 651.5 0.047509 0.047509 0.047509
4 652.0 0.119501 0.119501 0.119501
5 652.5 -0.187888 -0.187888 -0.187888
... ... ... ... ...
695 997.5 0.165262 0.165262 0.165262
696 998.0 -0.131729 -0.131729 -0.131729
697 998.5 0.038266 0.038266 0.038266
698 999.0 0.093568 0.093568 0.093568
699 999.5 0.022013 0.022013 0.022013
700 rows × 4 columns
以下是CSV DataFrame的示例:
t b
0 650.0 0.105299
1 650.5 0.193072
2 651.0 0.115404
3 651.5 0.047509
4 652.0 0.119501
5 652.5 -0.187888
... ...
答案 0 :(得分:0)
IIUC:
df = pd.concat([prepdf(x, 650, 1000) for x in PATHS], axis=1)
<强>更新强>
我猜三次显示相同数据集的问题是由以下几行引起的:
intdf = interp_frame.head(n=len(inttmp))
return intdf
interp_frame
- 未在函数中定义。最有可能的是之前在Python环境中定义的(iPython,Jupyter等)