将列合并为一个字符分隔的列适用于所有行

Combine columns into one column separated by a character apply to all rows

我想将现有 xlxs 文件的所有列合并为一个由 |

分隔的列

输入

10000         1201 - 1201      Premium Ice Cream    EA     76840485116    EA

需要输出

10000|1201 - 1201|Premium Ice Cream|EA|76840485116|EA

我有一个 Excel 公式可以完成这项工作

=Sheet1!A2&"|"&Sheet1!B2&"|"&Sheet1!C2&"|"&Sheet1!D2&"|"&Sheet1!E2&"|"&Sheet1!F2&"|"&Sheet1!G2

有没有办法使用 python 脚本将公式应用于所有行?

我试过使用 openpyxl 下面的代码是我最接近的解决方案。

from openpyxl import Workbook
from openpyxl import load_workbook
wb = load_workbook(filename = 'Filename.xlsx')
sheet_ranges = wb['Sheet1']
ws = wb.active  
ws["A1"] = '=Sheet1!A2&"|"&Sheet1!B2&"|"&Sheet1!C2&"|
           "&Sheet1!D2&"|"&Sheet1!E2&"|"&Sheet1!F2&"|"&Sheet1!G2'
wb.save("Filename.xlsx")

目前合并第二行并放入A1单元格。有超过 1800 行。 我想将公式应用于所有行并将结果放在新的 sheet.

我显然是编码初学者,因此非常感谢您的帮助

首先,您可以使用 pandas:

像这样阅读 excel
import pandas as pd
df=pd.read_excel('test.xlsx',header=None)

拥有这个数据框:

   0  1  2
0  a  b  c
1  a  b  c
2  a  b  c
3  a  b  c
4  a  b  c
5  a  b  c
6  a  b  c

你可以这样做:

#be sure to do this of you have any column that isn't character
df[0]=df[0].astype(str)

new_df=pd.DataFrame(df[0]+'|'+df[1]+"|"+df[2])
print(new_df)

       0
0  a|b|c
1  a|b|c
2  a|b|c
3  a|b|c
4  a|b|c
5  a|b|c
6  a|b|c

你可以这样保存:

new_df.to_excel('filename.xlsx')

使用 apply 功能:

df.apply(lambda x: '|'.join(x.astype(str)), 1)

输入

    0       1            2                  3   4           5
0   10000   1201 - 1201 Premium Ice Cream   EA  76840485116 EA

输出(只有1行)

'10000|1201 - 1201|Premium Ice Cream|EA|76840485116|EA'

这是一个很奇怪的请求,但很容易做到,不需要通过 Pandas,虽然这是一个很棒的图书馆,但在这里有点过分了。

ws1 = wb.active
ws2 = wb.create("New Sheet")

for row in ws1.iter_rows(values_only=True):
   vals = "|".join(row)
   ws2.append(vals)