如何从 pandas DataFrame 行中删除空格,直到第一个填充字段?

How to delete empty spaces from pandas DataFrame rows until first populated field?

假设我从 PFD 导入了一个非常混乱的数据,然后我清理了它。我有这样的东西:

Name Type Date other1 other2 other3
Name1 '' '' Type1 '' Date1
Name2 '' '' '' Type2 Date2
Name3 '' '' Type3 Date3 ''
Name4 '' Type4 '' '' Date4
Name5 Type5 '' Date5 '' ''

等等。如您所见,Type 始终在每一行的日期之前,但我基本上需要删除所有 ''(DataFrame 上当前为空字符串),同时将所有内容移至左侧,以便它们与各自的 Type 和 Date 列对齐。 此外,右边还有更多列有同样的问题,但由于结构原因我不能删除所有'',我正在寻找的解决方案只是移动 'everything to the left' 可以这么说(就像 pd.shift).

感谢您的帮助。

data = df.values.flatten()
pd.DataFrame(data[data != ""].reshape(-1, 3), columns = ['Name','Type', 'Date'])

或:

pd.DataFrame(df.values[df.values != ""].reshape(-1, 3), columns = ['Name','Type', 'Date'])

输出:

    Name    Type    Date
0   Name1   Type1   Date1
1   Name2   Type2   Date2
2   Name3   Type3   Date3
3   Name4   Type4   Date4
4   Name5   Type5   Date5

没有重塑:

pd.DataFrame(df.apply(lambda x: (a:=np.array(x))[a != ""] , axis = 1).values.tolist())

或:

s = df[0].copy()
for col in df.columns[1:]:
    s += " " + df[col]
pd.DataFrame(s.str.split().values.tolist(), columns = ['Name','Type', 'Date'])

对我有用的是:

while '' in df['Type'].unique():
    for i,row in df.iterrows():
        if row['Type'] == '':
            df.iloc[i, 1:] = df.iloc[i, 1:].shift(-1, fill_value='')

下一栏也一样