递归的pd.合并()输出

2024-09-27 19:18:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够获得一个CSV文件的集合,这些文件彼此共享一个共同的索引和时间t,我希望使用一个名为mergedf()的函数将它们合并在一起。在我看来,它就像它的工作,除了它打印了3次相同的值集。根据我的if语句,它似乎在打印filepath[0]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数据帧的示例:

     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
     ...    ...

Tags: csvpathdfforindexlenpdpaths
1条回答
网友
1楼 · 发布于 2024-09-27 19:18:30

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等)中定义的

相关问题 更多 >

    热门问题