问题描述
我有一个列表“lst1”,如果存在,我想在一行中附加多个值。谁能帮我解决这个问题。
lst1 = [['cnl','fb123','ins54'],['ins45'],['abc','xyz'],'xyz','fb765','ins567']]
adn = ['ab','cc']
fb = []
ins = []
otr = []
for lnk in lst1:
for lnk2 in lnk:
if 'fb' in lnk2:
try:
fb.append(lnk2)
except:
fb.append("")
elif 'ins' in lnk2:
try:
ins.append(lnk2)
except:
ins.append("")
elif ('fb' or 'ins') not in lnk2:
try:
otr.append(lnk2)
except:
otr.append("")
data = {}
data = {'fb': fb,'ins': ins,'otr': otr,'adn': adn}
result = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in data.items()]))
result.to_csv("raw_data.csv",index = False)
预期输出:
fb ins otr adn
0 fb123 ins54 cnl ab
1 ins45 cc
2 abc,xyz
3 fb765 ins567 abc,xyz
即便如此,我也尝试过“扩展”功能,但无法获得所需的输出。
解决方法
我不明白为什么在输出示例中第三行和第四行是空的?为什么'abc,xyz'在第二行?
仅根据描述实施。如果您想排除重复,您还可以将 *_check
列表转换为 set 。
import pandas as pd
lst1 = [['cnl','fb123','ins54'],['ins45'],['abc','xyz'],'xyz','fb765','ins567']]
adn = ['ab','cc']
fb = []
ins = []
otr = []
for lnk in lst1:
fb_check = [word for word in lnk if word.startswith('fb')]
ins_check = [word for word in lnk if word.startswith('ins')]
otr_check = [word for word in lnk if not word.startswith('fb') and not word.startswith('ins')]
fb.append(','.join(fb_check) if fb_check else '')
ins.append(','.join(ins_check) if ins_check else '')
otr.append(','.join(otr_check) if otr_check else '')
while len(adn) != len(fb):
adn.append('')
data = {'fb': fb,'ins': ins,'otr': otr,'adn': adn}
result = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in data.items()]))
print(result)
result.to_csv("raw_data.csv",index=False)
输出:
fb ins otr adn
0 fb123 ins54 cnl ab
1 ins45 cc
2 abc,xyz
3 fb765 ins567 abc,xyz