将列合并为一个字符分隔的列适用于所有行
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)
我想将现有 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:
像这样阅读 excelimport 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)