如何根据列前缀拆分pandas数据帧

时间:2015-09-29 23:38:28

标签: python pandas dataframe

我有一个从csv导入的数据框。它是这样的:

df
A.1  B.1  A.2  B.2
1    1    1    1
2    2    2    2

我的问题是,将此转换为仅包含A和B的单独数据帧的有效方法

df_a
A.1  A.2
1    1
2    2

df_b
B.1  B.2
1    1
2    2

就列名而言,我并不挑剔,将它们剥离到1和2等就可以了,但是却找不到一个好方法。我也愿意接受其他/更好的方法来完成我想要做的事情,以防对一个更有知识的人没有意义。谢谢!

3 个答案:

答案 0 :(得分:3)

您可以将df.filter与正则表达式一起使用:

df_a, df_B = df.filter(regex=r'^A'), df.filter(regex=r'^B')

df_a, df_B = df.filter(like='A'), df.filter(like='B')

请注意,如果您使用like='A',则会选择名称​​包含 'A'的所有列。如果您使用regex=r'^A',则只会选择名称​​开始A的列。

In [7]: df
Out[7]: 
   A.1  B.1  A.2  B.2
0    1    1    1    1
1    2    2    2    2

In [8]: df_a, df_B = df.filter(regex=r'^A'), df.filter(regex=r'^B')

In [9]: df_a
Out[9]: 
   A.1  A.2
0    1    1
1    2    2

In [10]: df_B
Out[10]: 
   B.1  B.2
0    1    1
1    2    2

答案 1 :(得分:1)

选择列:

dfa = df[['A.1', 'A.2']]

要更改列的名称:

dfa.reindex=["a1","a2"]

答案 2 :(得分:1)

好的,如果我理解正确,你只需要根据列名称添加N个新数据帧。

dfa = df[[col for col in df.columns if col.startswith("A")]].copy()
# same for dfb, dfc...

请注意,如果您希望稍后对新数据框copy()应用更改,则需要dfa。否则,如果我没记错的话,你会按指针应用更改,就像使用字典时一样。