gpt4 book ai didi

python - 如果列名称与数据帧名称相同,则从多个数据帧中选择特定列

转载 作者:行者123 更新时间:2023-12-01 07:23:43 25 4
gpt4 key购买 nike

我有多个文件,我需要从每个数据框中选择特定列并最终合并它们。这是我的数据框示例,

>> 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个这样的不同维度的数据框。我正在寻找的是:

  1. 首先,我需要仅选择与文件名相同的列。例如,在 df1 中,我只需要列 df1

  2. 最后,将它们连接在一起作为一个数据帧。

这里的问题是:对于某些数据帧,我有路径中所有文件名的列名,但对于少数数据帧,我只有带有文件名的列名和带有其他名称的附加列。所以我的下面的代码是从每个数据框中选择所有列。这不是我想要的。

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

关于python - 如果列名称与数据帧名称相同,则从多个数据帧中选择特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57555647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com