Concatinate不同文件形状抛出错误的多个文件:ValueError:传递值的形状是(88,57915),索引暗示(88,57906)

时间:2016-11-04 17:37:05

标签: python pandas numpy dataframe

我有多个CSV文件需要连接成单个数据框,最后,我应该有一个88列的DataFrame。每个88文件的长度不同。

所以我尝试了以下python脚本,

file_names = []
data_frames = []
path = r'/path/*'
all_files = glob.glob(os.path.join(path, "*.tsv")) 
for filename in all_files:
    name = os.path.basename(os.path.normpath(filename))
    file_names.append(name)
    df = pd.DataFrame.from_csv(filename,header=None,sep='\t')[[7]]
    df.rename(columns={7: name}, inplace=True)
    data_frames.append(df)

combined = pd.concat(data_frames, axis=1)

由于数据文件的长度不同,上面的脚本引发了如下错误,

ValueError: Shape of passed values is (88, 57915), indices imply (88, 57906)

我想知道在这种情况下如何将不同大小的多个文件连接到一个数据框中。任何建议都会很棒

2 个答案:

答案 0 :(得分:1)

您是否希望通过设置axis=0

来连接列

答案 1 :(得分:0)

好的,经过漫长的追踪和错误,我很幸运地找到了一个使用数据透视表的解决方案。 解决方案是,

  

从读取数据帧开始,

data_frames = []
path = r'/home/user/projects/ballgown/*'
all_files = glob.glob(os.path.join(path, "*.tsv")) 
  

将文件名作为额外列添加到数据框中,并将其作为融合数据框,使用三列['value','ID','Sample_name'],

for filename in all_files:
    name = os.path.basename(os.path.normpath(filename))
    df = pd.DataFrame.from_csv(filename,sep='\t')[['value']]
    #df.rename(columns={'FPKM': name}, inplace=True)
    df['Sample_name'] = name.replace('.bam.tsv','')
    data_frames.append(df.reset_index())

然后,我根据需要使用pivot_table重塑它,如下所示,

matrix = combined.pivot_table(index='Gene ID',columns='sample_name', values='FPKM')

这里打印出88列

的datafarme

感谢所有建议.. !!