pandas 将Python列表拆分为两个列表

dkqlctbz  于 2022-11-27  发布在  Python
关注(0)|答案(2)|浏览(162)

正在使用的代码:

def METRICS():
  if os.path.exists(""):
    os.remove("")
  link = ""
  options = webdriver.ChromeOptions()
  options.add_argument("--headless")
  options.add_argument("--window-size=1920,1080")
  prefs = {'download.default_directory' : ''}
  options.add_experimental_option('prefs', prefs)
  driver = webdriver.Chrome(options=options)
  driver.get(link)
  sleep(10)
  all_avg = driver.find_elements_by_xpath('//*[@id="panel-4"]/div/div[1]/div/div[2]/div/plugin-component/panel-plugin-graph/grafana-panel/ng-transclude/div/div[2]/div/div[1]/div')
  lst = []
  for avg in all_avg:
      #print(avg.text)
      lst.append(avg.text)
  #print(lst)
  list = [x.replace('\n',',')for x in lst]
  
  print (list)

输出:

['801,100.0%,802,78.3%,803,99.8%,804,18.5%,805,99.9%,811,100.0%,812,99.9%,813,97.9%,814,99.8%,815,99.9%,816,98.5%,817,100.0%,818,69.9%,819,100.0%,820,100.0%,821,95.9%,822,100.0%,823,100.0%']

我需要的第一套数字,即801 802 803等是在一个列表和百分比%是在另一个。这是这样我就可以在一个DF格式正确。
所需输出:

list_1 = ['801',802',803',804', etc ]
list_2 = ['100%',78.3%,'99.8%','18.5%', etc ]

使用pandasDF并制表后的最终输出:

| Placehol     | 701   | 702   | 703   | 704   | 705   | 706   | 707   | 708   | 709    | 710    | 711   | 712   | 713   |
|:-------------|:------|:------|:------|:------|:------|:------|:------|:------|:-------|:-------|:------|:------|:------|
| Availability | 99.1% | 98.5% | 67.0% | 87.0% | 98.3% | 98.0% | 96.9% | 99.1% | 100.0% | 100.0% | 95.9% | 98.1% | 98.1% |
0mkxixxg

0mkxixxg1#

您可以使用Python列表切片:https://www.geeksforgeeks.org/python-list-slicing/

lst = [x.replace('\n',',') for x in lst] # ['801,100.0%,802,78.3%,803...']

# convert to a list of strings
result = lst.join(",").split(",") # ['801','100.0%','802','78.3%','803',...]

# start from the first element, add every 2n + 1 element to result_1
result_1 = result[::2]

# start from the second element, add every 2n element to result_2
result_2 = result[1::2]

嗯,我没有注意到你的list只有一个元素。编辑了我的代码示例。

v09wglhw

v09wglhw2#

除了Vlad提供的解决方案之外,您还可以使用regex模块来解决您的问题。
我想使用的正则表达式模式是(,|^)((\d+)(\.\d+)?)(,|$),它选择没有百分号的数字,另一个是(,|^)((\d+)(\.\d+)?%)(,|$),它选择有百分号的数字。
我不知道什么是一个字符串的列表,但既然你已经使用了一个列表,我将根据你的输出给予你一个答案:

import re
myList = ['801,100.0%,802,78.3%,803,99.8%,804,18.5%,805,99.9%,811,100.0%,812,99.9%,813,97.9%,814,99.8%,815,99.9%,816,98.5%,817,100.0%,818,69.9%,819,100.0%,820,100.0%,821,95.9%,822,100.0%,823,100.0%']

list_1 = []
list_2 = []
for string in myList:
  temp = re.compile("(,|^)((\d+)(\.\d+)?)(,|$)").findall(string)
  list_1 += [x[1] for x in temp]
  temp = re.compile("(,|^)((\d+)(\.\d+)?%)(,|$)").findall(string)
  list_2 += [x[1] for x in temp]
print(list_1)
print(list_2)
输出
['801', '802', '803', '804', '805', '811', '812', '813', '814', '815', '816', '817', '818', '819', '820', '821', '822', '823']
['100.0%', '78.3%', '99.8%', '18.5%', '99.9%', '100.0%', '99.9%', '97.9%', '99.8%', '99.9%', '98.5%', '100.0%', '69.9%', '100.0%', '100.0%', '95.9%', '100.0%', '100.0%']

相关问题