我正在阅读一张excel表:
import pandas as pd
df = pd.read_excel('file.xlsx', usecols = 'A,B,C')
print(df)
现在我想创建一个列表,其中表中的每一行都是字符串。 另外我想在列表中的每个字符串的末尾添加一个'X':
keylist = []
list1, list2, list3 = df['A'].tolist(), df['B'].tolist(), df['C'].tolist()
for i in zip(list1, list2, list3):
val = map(str, i)
keylist.append('/'.join(val))
keylist += 'X'
print(keylist)
除了“添加X”部分外,一切都有效。这导致:
['blue/a/a1', 'X', 'blue/a/a2', 'X', ....
但我想要的是:
['blue/a/a1/X', 'blue/a/a2/X',
事先谢谢。
答案 0 :(得分:8)
我认为更好的是:
public class User
{
public int IdUser { get; set; }
public string UserName { get; set; }
public bool Validate { get; set; }
}
public class PartnerUser
{
public int IdPartnerUser { get; set; }
public int UserID { get; set; }
}
或者只有几列:
d = {'A': ['blue', 'blue', 'blue', 'red', 'red', 'red', 'yellow',
'yellow', 'green', 'green', 'green'],
'B': ['a', 'a', 'b', 'c', 'c', 'c', 'd', 'e', 'f', 'f', 'g'],
'C': ['a1', 'a2', 'b1', 'c1', 'c2', 'c3', 'd1', 'e1', 'f1', 'f2', 'g1']}
df = pd.DataFrame(d)
print (df)
A B C
0 blue a a1
1 blue a a2
2 blue b b1
3 red c c1
4 red c c2
5 red c c3
6 yellow d d1
7 yellow e e1
8 green f f1
9 green f f2
10 green g g1
keylist = df.apply(lambda x: '/'.join(x), axis=1).add('/X').values.tolist()
print (keylist)
['blue/a/a1/X', 'blue/a/a2/X', 'blue/b/b1/X', 'red/c/c1/X', 'red/c/c2/X',
'red/c/c3/X', 'yellow/d/d1/X', 'yellow/e/e1/X',
'green/f/f1/X', 'green/f/f2/X', 'green/g/g1/X']
一些时间 s:
keylist = (df['A'] + '/' + df['B'] + '/' + df['C'] + '/X').values.tolist()
答案 1 :(得分:1)
您正在做+ =执行添加到该列表的密钥列表,您需要对val
数组执行此操作。
for i in zip(list1, list2, list3):
val = map(str,i)
val += 'X' # you can combine this and the above if you want to look like:
#val = map(str, i) + 'X'
keylist.append("/".join(val))
print(keylist)
答案 2 :(得分:1)
以下是使用str.format
列表理解的一种方法:
res = ['{0}/{1}/{2}/X'.format(i, j, k) for i, j, k in df.values.tolist()]
# ['blue/a/a1/X', 'blue/a/a2/X', 'blue/b/b1/X', 'red/c/c1/X', ...]
在此解决方案中,没有必要分成3个列表和zip
个。
答案 3 :(得分:1)
基于pandas
df.assign(New='X').apply('/'.join,1).tolist()
Out[812]: ['blue/a/a1/X', 'blue/a/a2/X', 'blue/b/b1/X']
答案 4 :(得分:0)
您可以在循环中每次/X
添加list
到最后一项:
for i in zip(list1, list2, list3):
val = map(str, i)
keylist.append('/'.join(val))
keylist[-1] += '/X'
# ['blue/a/a1/X', 'blue/a/a2/X',....]
答案 5 :(得分:0)
您可以使用cat
字符串操作将列连接到具有指定sep
参数的单个系列。然后只需将新系列转换为列表
df
A B C
0 blue a a1
1 blue a a2
2 blue b b1
3 red c c1
4 red c c2
5 red c c3
6 yellow d d1
7 yellow e e1
8 green f f1
9 green f f2
10 green g g1
df.iloc[:,0].str.cat([df[c] for c in df.columns[1:]],sep='/').tolist()
['blue/a/a1', 'blue/a/a2', 'blue/b/b1', 'red/c/c1', 'red/c/c2', 'red/c/c3', 'yellow/d/d1', 'yellow/e/e1', 'green/f/f1', 'green/f/f2', 'green/g/g1']