Python 如果标题行为空,则Dataframe追加整个列
如果标题列为空,我需要将其与附近的列合并 对于场景1, 我需要合并列3Amount和列4empty 我需要下面的结果 对于场景2, 我需要合并第3列Empty和第4列Amount 我需要下面的结果 任何帮助都将不胜感激 注: 行标题是动态名称。它不是上面提到的静态名称。i、 例如,标题名称可以是任何名称。示例Python 如果标题行为空,则Dataframe追加整个列,python,pandas,dataframe,Python,Pandas,Dataframe,如果标题列为空,我需要将其与附近的列合并 对于场景1, 我需要合并列3Amount和列4empty 我需要下面的结果 对于场景2, 我需要合并第3列Empty和第4列Amount 我需要下面的结果 任何帮助都将不胜感激 注: 行标题是动态名称。它不是上面提到的静态名称。i、 例如,标题名称可以是任何名称。示例 Amount Empty 0 10 € 1 20 € 2 30 € 3 40 € 使用np.where 使用
Amount Empty
0 10 €
1 20 €
2 30 €
3 40 €
使用np.where
使用:
您可以检查数据类型:
s = df.dtypes
print (s)
object
col0 int64
col int64
int64
col2 object
dtype: object
若列名为空字符串且dtype为对象,则表示列由货币填充,逻辑为将这些空字符串替换为缺少的值并向前填充,最后将空列名替换为数字,并通过反向填充替换列名:
m = (s == object) & (s.index == '')
a = s.index.to_series().mask(m).ffill().replace({'':np.nan}).bfill()
“货币”和“下一个数字”列的输出列名称相同:
df.columns = a
print (df)
col0 col0 col col2 col2
0 € 50 1 50 €
1 € 100 1 100 €
2 € 25 1 25 €
3 € 90 1 90 €
然后使用自定义lambda函数和groupby将其连接在一起:
def f(x):
if len(x.columns) == 2:
if isinstance(x.iloc[0, 0], str):
return x.iloc[:, 0] + ' ' + x.iloc[:, 1].astype(str)
else:
return x.iloc[:, 1] + ' ' + x.iloc[:, 0].astype(str)
else:
return x.iloc[:, 0]
df = df.groupby(df.columns, axis=1).apply(f)
print (df)
col col0 col2
0 1 € 50 € 50
1 1 € 100 € 100
2 1 € 25 € 25
3 1 € 90 € 90
请检查我的最新问题。行标题是动态的。正如上面提到的,它不是静态的。标题是如何生成的。。。?请解释一下动态
m = (s == object) & (s.index == '')
a = s.index.to_series().mask(m).ffill().replace({'':np.nan}).bfill()
df.columns = a
print (df)
col0 col0 col col2 col2
0 € 50 1 50 €
1 € 100 1 100 €
2 € 25 1 25 €
3 € 90 1 90 €
def f(x):
if len(x.columns) == 2:
if isinstance(x.iloc[0, 0], str):
return x.iloc[:, 0] + ' ' + x.iloc[:, 1].astype(str)
else:
return x.iloc[:, 1] + ' ' + x.iloc[:, 0].astype(str)
else:
return x.iloc[:, 0]
df = df.groupby(df.columns, axis=1).apply(f)
print (df)
col col0 col2
0 1 € 50 € 50
1 1 € 100 € 100
2 1 € 25 € 25
3 1 € 90 € 90