我有一个包含3个熊猫数据帧的输出文件。
df1
A R N D
0 0.033333 0.086667 0.014444 0.058889
1 0.093333 0.084444 0.011111 0.034444
2 0.093333 0.084444 0.011111 0.034444
df2
A R N D
0 0.033333 0.008889 0.000000 0.055556
1 0.050000 0.016667 0.000000 0.058889
2 0.071111 0.018889 0.003333 0.027778
df3
A R N D
0 0.016667 0.007778 0.000000 0.003333
1 0.027778 0.002222 0.003333 0.024444
2 0.006667 0.000000 0.000000 0.055556
我需要使用df中的文件作为下一个程序的输入。
我知道我可以打开文件并提取相应的行,然后将它们放入df中。
但是我想知道是否有内置的东西可以读取它们的名称,例如'df1'或'df2'。
我是一个流血的初学者-所以要温柔
谢谢
答案 0 :(得分:1)
最简单的方法是在dfs中添加一列,以指示这些数据属于哪个df,然后合并并保存它们:
#include <cassert>
#include <vector>
template <typename E>
class VecExpression {
public:
double operator[](size_t i) const
{
// Delegation to the actual expression type. This avoids dynamic polymorphism (a.k.a. virtual functions in C++)
return static_cast<E const&>(*this)[i];
}
size_t size() const { return static_cast<E const&>(*this).size(); }
};
class Vec : public VecExpression<Vec> {
std::vector<double> elems;
public:
double operator[](size_t i) const { return elems[i]; }
double &operator[](size_t i) { return elems[i]; }
size_t size() const { return elems.size(); }
Vec(size_t n) : elems(n) {}
// construct vector using initializer list
Vec(std::initializer_list<double> init) : elems(init) {}
// A Vec can be constructed from any VecExpression, forcing its evaluation.
template <typename E>
Vec(VecExpression<E> const& expr) : elems(expr.size()) {
for (size_t i = 0; i != expr.size(); ++i) {
elems[i] = expr[i];
}
}
};
template <typename E1, typename E2>
class VecSum : public VecExpression<VecSum<E1, E2> > {
E1 const& _u;
E2 const& _v;
public:
VecSum(E1 const& u, E2 const& v) : _u(u), _v(v) {
assert(u.size() == v.size());
}
double operator[](size_t i) const { return _u[i] + _v[i]; }
size_t size() const { return _v.size(); }
};
template <typename E1, typename E2>
VecSum<E1, E2>
operator+(VecExpression<E1> const& u, VecExpression<E2> const& v) {
return VecSum<E1, E2>(*static_cast<const E1*>(&u), *static_cast<const E2*>(&v));
}
int main() {
Vec v0 = {23.4,12.5,144.56,90.56};
Vec v1 = {67.12,34.8,90.34,89.30};
Vec v2 = {34.90,111.9,45.12,90.5};
auto expr = v0 + v1 + v2;
Vec v1 = expr; // ok
Vec v2 = expr; // not ok!
}
再次加载后,您可以将它们分开
df = pd.concat([df1.assign(df = 'df1'),df2.assign(df = 'df2'),df3.assign(df = 'df3')])
df.to_csv('data.csv')