我想将列表值转换为python数据框,但是我的标头值在列表内。
列表中的值是这样的
val validChars = mapOf('a' to 'o', 'e' to 'u', 'i' to 'y')
val chars = validChars.plus(validChars.map { it.key.toUpperCase() to it.value.toUpperCase() }.toMap())
var pattern = "klmn"
pattern = pattern.plus(pattern.toUpperCase())
val str = "kotlIn is a functional programming Language"
val result = str.mapIndexed { i, c ->
if (i > 0) { if (pattern.contains(str[i -1])) chars.getOrDefault(c, c) else c } else c
}.joinToString("")
println(result)
我已经从espn网站上删除了这些值,当值在列表中时,现在是记分卡,我想将它们转换为pandas数据框。当我将列表转换成数据框后,我得到的是这样
cols_head=['BATSMEN', '', 'R', 'B', '4s', '6s', 'SR', '', 'C Hemraj', 'c Mohammad Mithun b Mehidy Hasan Miraz', '9', '17', '2', '0', '52.94', '']
从序列0到7,这些是数据帧的列
这是我尝试转换值的代码
0
0 BATSMEN
1 Out
2 R
3 B
4 4s
5 6s
6 SR
7
8 C Hemraj
9 c Mohammad Mithun b Mehidy Hasan Miraz
10 9
11 17
12 2
13 0
14 52.94
我要这样输出数据框
cols_head=[x.text.strip() for x in cell]
#print(cols_head)
List_values=cols_head[:-13]
df=pd.DataFrame(List_values)
答案 0 :(得分:1)
您可以使用列表推导。这是在您的列表包含任意数量的相同格式的行的假设下进行的。注意,您实际上有8列。最后一个只是标有一个空字符串。
data = ['BATSMEN', '', 'R', 'B', '4s', '6s', 'SR', '', 'C Hemraj', 'c Mohammad Mithun b Mehidy Hasan Miraz', '9', '17', '2', '0', '52.94', '']
n = 8
df = pd.DataFrame([data[n*i:n*(i+1)] for i in range(1, len(data) // n)],
columns=data[:n])
print(df)
# BATSMEN R B 4s 6s SR
# 0 C Hemraj c Mohammad Mithun b Mehidy Hasan Miraz 9 17 2 0 52.94
print(df.columns)
# Index(['BATSMEN', '', 'R', 'B', '4s', '6s', 'SR', ''], dtype='object')
答案 1 :(得分:0)
这适用于您发布的数据。如果您的列表实际包含多行数据,则需要对其进行一些微调。
import pandas as pd
cols_head=['BATSMEN', '', 'R', 'B', '4s', '6s', 'SR', '', 'C Hemraj', 'c Mohammad Mithun b Mehidy Hasan Miraz', '9', '17', '2', '0', '52.94', '']
headers = cols_head[:7]
data = cols_head[8:-1] # Ignores the two blanks at index 7 and 15
df = pd.DataFrame([data], columns=headers)
输出:
BATSMEN R B 4s 6s SR
0 C Hemraj c Mohammad Mithun b Mehidy Hasan Miraz 9 17 2 0 52.94