Python 熊猫-删除每行的前导零和尾随零

Python 熊猫-删除每行的前导零和尾随零,python,pandas,Python,Pandas,我想在我的df中删除前面的零值并逐行测试它们,然后让它们转换为“对齐” 下面的例子可能是最好的证明 初始df: index c1 c2 c3 c4 c5 c6 c7 c8 1 0 0 1 2 3 4 5 0 2 0 0 0 1 2 3 4 5 3 0 1 2 3 0 0 0 0 4 0 0 1 2 3 4 0 0 5 1 2 3 4 5 6 7 0 6 0 0 0

我想在我的df中删除前面的零值并逐行测试它们,然后让它们转换为“对齐”

下面的例子可能是最好的证明

初始df:

index c1 c2 c3 c4 c5 c6 c7 c8
1      0  0  1  2  3  4  5  0
2      0  0  0  1  2  3  4  5
3      0  1  2  3  0  0  0  0
4      0  0  1  2  3  4  0  0
5      1  2  3  4  5  6  7  0
6      0  0  0  1  0  0  4  0
输出:

index c1 c2 c3 c4 c5 c6 c7
1      1  2  3  4  5  
2      1  2  3  4  5
3      1  2  3  
4      1  2  3  4  
5      1  2  3  4  5  6  7  
6      1  0  0  4 
        c1   c2   c3   c4   c5   c6   c7
index                                   
1      1.0  2.0  3.0  4.0  5.0  NaN  NaN
2      1.0  2.0  3.0  4.0  5.0  NaN  NaN
3      1.0  2.0  3.0  NaN  NaN  NaN  NaN
4      1.0  2.0  3.0  4.0  NaN  NaN  NaN
5      1.0  2.0  3.0  4.0  5.0  6.0  7.0
6      1.0  0.0  0.0  4.0  NaN  NaN  NaN
请注意,真值字符串中可能有零,因此需要在第一次/反向第一次出现时停止。这可能吗?谢谢。

使用:

修剪一维数组或序列的前导和/或尾随零

使用:

修剪一维数组或序列的前导和/或尾随零

您可以使用以下选项:

df_out = df.apply(lambda x: pd.Series(x.loc[x.mask(x == 0).first_valid_index():
                                      x.mask(x == 0).last_valid_index()].tolist()), 
                  axis=1)
df_out.set_axis(df.columns[df_out.columns], axis=1, inplace=False)
输出:

index c1 c2 c3 c4 c5 c6 c7
1      1  2  3  4  5  
2      1  2  3  4  5
3      1  2  3  
4      1  2  3  4  
5      1  2  3  4  5  6  7  
6      1  0  0  4 
        c1   c2   c3   c4   c5   c6   c7
index                                   
1      1.0  2.0  3.0  4.0  5.0  NaN  NaN
2      1.0  2.0  3.0  4.0  5.0  NaN  NaN
3      1.0  2.0  3.0  NaN  NaN  NaN  NaN
4      1.0  2.0  3.0  4.0  NaN  NaN  NaN
5      1.0  2.0  3.0  4.0  5.0  6.0  7.0
6      1.0  0.0  0.0  4.0  NaN  NaN  NaN
N

您可以使用:

df_out = df.apply(lambda x: pd.Series(x.loc[x.mask(x == 0).first_valid_index():
                                      x.mask(x == 0).last_valid_index()].tolist()), 
                  axis=1)
df_out.set_axis(df.columns[df_out.columns], axis=1, inplace=False)
输出:

index c1 c2 c3 c4 c5 c6 c7
1      1  2  3  4  5  
2      1  2  3  4  5
3      1  2  3  
4      1  2  3  4  
5      1  2  3  4  5  6  7  
6      1  0  0  4 
        c1   c2   c3   c4   c5   c6   c7
index                                   
1      1.0  2.0  3.0  4.0  5.0  NaN  NaN
2      1.0  2.0  3.0  4.0  5.0  NaN  NaN
3      1.0  2.0  3.0  NaN  NaN  NaN  NaN
4      1.0  2.0  3.0  4.0  NaN  NaN  NaN
5      1.0  2.0  3.0  4.0  5.0  6.0  7.0
6      1.0  0.0  0.0  4.0  NaN  NaN  NaN

N

这是删除所有零,而不仅仅是在零之前和对零进行测试。@AmyChodorowski您是对的。我修改了这个解决方案。谢谢你让我知道。这是删除所有的零,而不仅仅是前置和试用零。@AmyChodorowski你说得对。我修改了这个解决方案。谢谢你让我知道。