我有一个熊猫数据帧,其列的名称是这样的:BT_XXX_XX.XX%_X.XX.XX ;EH_XXX_XX.XX%_XX.XX.XX ;C_XXX_XX.XX%_XX.XX.XX,其中 X 表示任何字母数字字符。他们完全杂乱无章。
我想将数据帧拆分为包含 BT_、EH_和 C_* 的不同数据帧(就像我在 bash 脚本中所做的那样(。
我按字母顺序对它们进行了排序,以使BT_、EH_和C_*按顺序排列。但是,我不知道如何自动查找第一个字符串以创建全新的数据帧。
目前,我可以通过每次检查每组列的位置来手动执行此操作。
#Sorting the dataframe by alphabetical order
dataset = dataset.reindex(sorted(dataset.columns), axis=1)
#Splitting the dataframe
df1 = dataset.iloc[:, :72]
df2 = dataset.iloc[:, 72:148]
df3 = dataset.iloc[148, 148:]
我希望将此操作自动化,以避免检查BT_*列的结束位置以及EH_*或C_*的开始位置。
您可以使用 str 的 startsWith 函数使用过滤器列,如下例所示,无需在此之前对列进行排序
df = pd.DataFrame(np.random.rand(10,10), columns=[f"{a}_{i}" for i in range(5) for a in "AB"])
df1= df.loc[:, df.columns.str.startswith("A_")]
df2 = df.loc[:, df.columns.str.startswith("B_")]
display(df1.head())
display(df2.head())
您可以使用groupby
在第一个'_'
之前拆分存根上的数据帧。您可以将它们存储在字典中,并将存根作为键。
df = pd.DataFrame(columns=['BT_XXX_XX.XX%_X.XX.XX', 'BT_13131_1231231',
'EH_XXX_XX.XX%_XX.XX.XX', 'C_XXX_XX.XX%_XX.XX.XX'])
dict(tuple(df.groupby(df.columns.str.split('_').str[0], axis=1)))
{'BT': Empty DataFrame
Columns: [BT_XXX_XX.XX%_X.XX.XX, BT_13131_1231231]
Index: [],
'C': Empty DataFrame
Columns: [C_XXX_XX.XX%_XX.XX.XX]
Index: [],
'EH': Empty DataFrame
Columns: [EH_XXX_XX.XX%_XX.XX.XX]
Index: []}