我有一些数据文件,它们被转换成数据帧,这些数据帧有时共享列名,而其他数据帧则共享时间序列索引,每当匹配时,我都希望将它们合并为一个基于列和索引的数据帧。由于命名中没有序列,因此它们随机出现以进行串联。如果两个dataframe具有不同的列,并沿着axis=1
连接起来,那么它工作得很好,但是如果结果dataframe与新的df结合起来,并带有先前合并的dataframe之一的列名,那么它就无法连接。例如,对于这些数据files:
import pandas as pd
df1 = pd.read_csv('0.csv', index_col=0, parse_dates=True, infer_datetime_format=True)
df2 = pd.read_csv('1.csv', index_col=0, parse_dates=True, infer_datetime_format=True)
df3 = pd.read_csv('2.csv', index_col=0, parse_dates=True, infer_datetime_format=True)
data1 = pd.DataFrame()
file_list = [df1, df2, df3] # fails
# file_list = [df2, df3,df1] # works
for fn in file_list:
if data1.empty==True or fn.columns[1] in data1.columns:
data1 = pd.concat([data1,fn])
else:
data1 = pd.concat([data1,fn], axis=1)
当我尝试这样做的时候,我得到了ValueError: Plan shapes are not aligned
。在我的例子中,没有办法首先加载所有数据帧并检查它们的列名。这样我就可以将所有具有相同列名的df
组合到后面的concat
这些具有不同列名的数据帧,我知道这些数据帧的工作原理如下所示。然而,在我的例子中,要求预加载所有数据帧并重新排列连接序列的解决方案是不可能的(这只是针对上面的一个工作示例)。我需要一个灵活性,在任何序列的信息来它可以连接到更大的数据帧data1
。如果你有合适的建议,请告诉我。你知道吗
如果您一步一步地遍历循环,您会发现在第一次迭代中它进入
if
,因此data1
等于df1
。在第二次迭代中,它转到else
,因为data1
不是空的,''Temperature product barrel ValueY''
不在data1.columns
。 在else之后,data1
有一些重复的列名。在重复列名的每一行中。(两列中的一列是Nan
,另一列是float)。这就是pd.concat()
失败的原因。你知道吗在尝试连接以消除重复列之前,可以聚合重复列:
在那之后,你会得到
相关问题 更多 >
编程相关推荐