删除列表中小于 3 位的数字,同时项目数量保持不变
Delete numbers smaller then 3 digits in a list while amount of items stays the same
我想规范化包含年份的列表。重要的是 列表中的项目数量保持不变 ,因为我要将列表转换为数据框并且行需要与其他变量对齐。这是我的清单。它包含许多不同的方式来标记年份:
['1817 (1817p)', '1800-1824 (19.1q)', '1825-1849', 'ca. 1850', '1856–60', '1861-07-XX', 'copied between 1824 and 1845', 'copied d. 14tn Merz 1767', '1718']
现在,我只想为列表中的每个项目获得 1 年。例如:
['1817', '1800', '1825', '1850', '1856', '1861', '1824', '1767', '1718']
如果1项中有两年,则选择第一年。 (如果列表中有 2 项,如果你能得到平均值,则加分。)
为了得到想要的结果,我删除了括号内的所有内容并将“-”替换为空格。
import re
data2 = []
for i in data:
df8 = re.sub(r"\([^()]*\)", "", i)
df10 = re.sub((r'\–'), " ", df8)
df11 = re.sub((r'\-'), " ", df10)
data2 += [df11]
print(data2)
输出 1:
['1817 ', '1800 1824 ', '1825 1849', 'ca. 1850', '1856 60', '1861 07 XX', 'copied between 1824 and 1845', 'copied d. 14tn Merz 1767', '1718']
然后我遍历了这些项目,但最终列表中的项目比开始时更多。
ls = data2
ls2 = []
for i in ls:
res = re.findall(r'\w+', i)
for w in res:
if len(w) > 3:
ls2.append(w)
print(ls2)
输出 2:
['1817', '1800', '1824', '1825', '1849', '1850', '1856', '1861', 'copied', 'between', '1824', '1845', 'copied', '14tn', 'Merz', '1767', '1718']
我能想到的是结合使用 regex 和 numpy 模块:
import re
import numpy as np
myList = ['1817 (1817p)', '1800-1824 (19.1q)', '1825-1849', 'ca. 1850', '1856–60', '1861-07-XX', 'copied between 1824 and 1845', 'copied d. 14tn Merz 1767', '1718']
[np.array(re.findall("\d{4}",x)).astype("int").mean() for x in myList]
输出
[1817.0, 1812.0, 1837.0, 1850.0, 1856.0, 1861.0, 1834.5, 1767.0, 1718.0]
这实际上为您提供了列表中每个元素中数字的平均值。
我想规范化包含年份的列表。重要的是 列表中的项目数量保持不变 ,因为我要将列表转换为数据框并且行需要与其他变量对齐。这是我的清单。它包含许多不同的方式来标记年份:
['1817 (1817p)', '1800-1824 (19.1q)', '1825-1849', 'ca. 1850', '1856–60', '1861-07-XX', 'copied between 1824 and 1845', 'copied d. 14tn Merz 1767', '1718']
现在,我只想为列表中的每个项目获得 1 年。例如:
['1817', '1800', '1825', '1850', '1856', '1861', '1824', '1767', '1718']
如果1项中有两年,则选择第一年。 (如果列表中有 2 项,如果你能得到平均值,则加分。)
为了得到想要的结果,我删除了括号内的所有内容并将“-”替换为空格。
import re
data2 = []
for i in data:
df8 = re.sub(r"\([^()]*\)", "", i)
df10 = re.sub((r'\–'), " ", df8)
df11 = re.sub((r'\-'), " ", df10)
data2 += [df11]
print(data2)
输出 1:
['1817 ', '1800 1824 ', '1825 1849', 'ca. 1850', '1856 60', '1861 07 XX', 'copied between 1824 and 1845', 'copied d. 14tn Merz 1767', '1718']
然后我遍历了这些项目,但最终列表中的项目比开始时更多。
ls = data2
ls2 = []
for i in ls:
res = re.findall(r'\w+', i)
for w in res:
if len(w) > 3:
ls2.append(w)
print(ls2)
输出 2:
['1817', '1800', '1824', '1825', '1849', '1850', '1856', '1861', 'copied', 'between', '1824', '1845', 'copied', '14tn', 'Merz', '1767', '1718']
我能想到的是结合使用 regex 和 numpy 模块:
import re
import numpy as np
myList = ['1817 (1817p)', '1800-1824 (19.1q)', '1825-1849', 'ca. 1850', '1856–60', '1861-07-XX', 'copied between 1824 and 1845', 'copied d. 14tn Merz 1767', '1718']
[np.array(re.findall("\d{4}",x)).astype("int").mean() for x in myList]
输出
[1817.0, 1812.0, 1837.0, 1850.0, 1856.0, 1861.0, 1834.5, 1767.0, 1718.0]
这实际上为您提供了列表中每个元素中数字的平均值。