pandas 展开字母数字字符进行迭代
pandas expand alphanumeric characters to iterate
我有一个包含字母数字字符的列表,如下所示
l1 = ['G1','L1']
我想知道我们是否有类似下面的内容
for i in range(l1): #this doesn't work because range is only for numeric values
for i in range(G1:L1): #this also doesn't work
但是,我希望每个 运行 处的 i
值从 G1
到 H1
到 I1
到 J1
到 K1
到 L1
范围总是需要一个数字,不能使用字符串。
但是,您可以使用 built-in ord()
函数将字母转换为数字,然后使用 chr()
函数将它们从数字转换回 ASCII 字符。
代码
a = [chr(c)+'1' for c in range(ord('G'), ord('M'))]
print(a)
输出
['G1', 'H1', 'I1', 'J1', 'K1', 'L1']
更新:双字符的解决方案。
对双字符执行此操作稍微复杂一些,但是 对此有解决方案。您可以简单地使用该答案中的 from_excel()
和 to_excel()
函数,并将它们替换为我上面的代码,如下所示。
代码
a = [to_excel(i) for i in range(from_excel('G'), from_excel('AG'))]
print(a)
输出
['G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF']
您可以使用:
from openpyxl.utils import coordinate_to_tuple, get_column_letter
def excel_range(start, end):
t1 = coordinate_to_tuple(start)
t2 = coordinate_to_tuple(end)
rows, cols = zip(t1, t2)
cells = []
for r in range(rows[0], rows[1]+1):
for c in range(cols[0], cols[1]+1):
cells.append(f'{get_column_letter(c)}{r}')
return cells
cells = excel_range('AA1', 'AC4')
输出:
>>> cells
['AA1',
'AB1',
'AC1',
'AA2',
'AB2',
'AC2',
'AA3',
'AB3',
'AC3',
'AA4',
'AB4',
'AC4']
我有一个包含字母数字字符的列表,如下所示
l1 = ['G1','L1']
我想知道我们是否有类似下面的内容
for i in range(l1): #this doesn't work because range is only for numeric values
for i in range(G1:L1): #this also doesn't work
但是,我希望每个 运行 处的 i
值从 G1
到 H1
到 I1
到 J1
到 K1
到 L1
范围总是需要一个数字,不能使用字符串。
但是,您可以使用 built-in ord()
函数将字母转换为数字,然后使用 chr()
函数将它们从数字转换回 ASCII 字符。
代码
a = [chr(c)+'1' for c in range(ord('G'), ord('M'))]
print(a)
输出
['G1', 'H1', 'I1', 'J1', 'K1', 'L1']
更新:双字符的解决方案。
对双字符执行此操作稍微复杂一些,但是 from_excel()
和 to_excel()
函数,并将它们替换为我上面的代码,如下所示。
代码
a = [to_excel(i) for i in range(from_excel('G'), from_excel('AG'))]
print(a)
输出
['G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF']
您可以使用:
from openpyxl.utils import coordinate_to_tuple, get_column_letter
def excel_range(start, end):
t1 = coordinate_to_tuple(start)
t2 = coordinate_to_tuple(end)
rows, cols = zip(t1, t2)
cells = []
for r in range(rows[0], rows[1]+1):
for c in range(cols[0], cols[1]+1):
cells.append(f'{get_column_letter(c)}{r}')
return cells
cells = excel_range('AA1', 'AC4')
输出:
>>> cells
['AA1',
'AB1',
'AC1',
'AA2',
'AB2',
'AC2',
'AA3',
'AB3',
'AC3',
'AA4',
'AB4',
'AC4']