需要python的建议。我有一个excel表与20列的值,如12->23我需要将所有列分成两个pre和post pre将有值12和post将有值23等…并且这些列应该在它们各自的父列下面使用pandas
输入:
| Column A |
| -------- |
| 12 --> 23|
| 13 --> 24|
输出| column A |
|pre| |post|
| 12| | 23 |
| 13| | 24 |
有很多列,所以我不能直接使用列名
我尝试下面的代码,它工作,如果我知道列名,但不如果我必须循环列没有他们的名字
df = pd.read_excel('path/to/excel_file.xlsx')
for col in df.columns:
new_cols = df[col].str.split(expand=True)
df[col + '_1'] = new_cols[0]
df[col + '_2'] = new_cols[1]
df.drop(columns=df.columns[:-2], inplace=True)
它不适合我
您可以使用str.split
:
df[['pre', 'post']] = df['Column A'].str.split(r's*-->s*', expand=True)
print(df)
# Output
Column A pre post
0 12 --> 23 12 23
1 13 --> 24 13 24
对于多列:
data = []
for col in df.columns:
new_cols = df[col].str.split(r's*-->s*', expand=True)
if new_cols.shape[1] == 2:
df = df.drop(columns=col)
data.append(new_cols.add_prefix(col + '_'))
df = pd.concat([df, *data], axis=1)
输出:
>>> df
Column A_0 Column A_1
0 12 23
1 13 24