Python 如果列名与数据帧名称相同,则从多个数据帧中选择特定列
我有多个文件,我需要从每个数据帧中选择一个特定的列,并最终合并它们。 以下是我的数据框示例Python 如果列名与数据帧名称相同,则从多个数据帧中选择特定列,python,pandas,dataframe,multiple-columns,Python,Pandas,Dataframe,Multiple Columns,我有多个文件,我需要从每个数据帧中选择一个特定的列,并最终合并它们。 以下是我的数据框示例 >> df1.head() ID df1 fox mnd ADF 49.0 34.0 55.7 XCF 89.7 32.8 21.7 第二和第三数据帧是 >> df2.head() ID lat2 df2 sap ADF 67.00 84.00 95.70 XCF 59.70 62.80 1
>> df1.head()
ID df1 fox mnd
ADF 49.0 34.0 55.7
XCF 89.7 32.8 21.7
第二和第三数据帧是
>> df2.head()
ID lat2 df2 sap
ADF 67.00 84.00 95.70
XCF 59.70 62.80 11.70
BHG 89.00 54.89 0.34
>> df3.head()
ID df1 df2 df3
ADF 56.00 84.00 95.70
XCF 59.70 62.80 11.70
CXD 89.90 0.90 1.56
以此类推,我有37个不同维度的数据帧。我要找的是:
df1
中,我只需要列df1
path = 'usr/fils/data'
all_files = [os.path.join(path, i) for i in os.listdir(path) if i.endswith('tsv')]
filenames = [os.path.basename(os.path.normpath(files)) for files in all_files]
main = []
for files in all_files:
for samids in filenames:
dfs = pd.DataFrame.from_csv(files, sep="\t")
dfs.reset_index(drop=False, inplace=True)
if samids in dfs.columns:
pc_matrix = dfs[[samids]]
main.append(pc_matrix)
merged = pd.concat(main, axis=1)
例如,在本例中,合并的
数据帧由三个数据帧中的所有列组成。然而,这不是我想要的
最后,我需要我的数据框
>> df_final
ID df1 df2 df3
ADF 49.00 84.00 95.70
XCF 89.70 62.80 11.70
BHG NA 89.00 NA
CXD NA NA 1.56
任何建议都将不胜感激。
谢谢大家! 使用:
#https://www.dropbox.com/sh/mytlp1t6bro1yly/AAAofCoHrwZTtnn04NFYGSb1a?dl=0
all_files = glob.glob('path/*')
main = []
for files in all_files:
c = os.path.basename(os.path.normpath(files))
try:
df = pd.read_csv(files, usecols=[c] + ['ID'], index_col=['ID'], sep='\t')
#if possible duplicated ID column - use mean or sum for unique values
#df = df.mean(level=0)
#df = df.sum(level=0)
print (df)
main.append(df)
except:
pass
merged = pd.concat(main,axis=1, sort=True)
print (merged)
df1 df2 df3
ADF 49.0 84.00 95.70
BHG NaN 54.89 NaN
CXD NaN NaN 1.56
XCF 89.7 62.80 11.70
感谢您提供的快速解决方案,但是,您提供的解决方案有问题,我输入了不同行ID(行索引)的数据帧。因此,
concat
步骤抛出错误。另外,usecols
也抛出了错误:``ValueError:usecols不匹配列,需要但未找到的列:['df1']``对不起,我已经编辑了我的问题,因为数据场在列名方面也是异构的。因此,usecol
功能不会选择感兴趣的列,而是抛出一条错误消息。感谢您的解决方案,但它仍然返回空的df
。因此concat steop抛出了errorhmm,在实际数据集中,它仍然不起作用。mean(level=0),无法解决问题。我接受答案。非常感谢您抽出时间。