我有一个包含两列的数据框,我基本上想要做的是创建一个字典,其中列名作为键的列和连接行作为值。
以下是包含2列
的示例数据框X1KS_AH353KBBXX_8_Aspen_F07_X5 X2861_AH353KBBXX_8_Aspen_D08_X5
G G
N C
G G
M C
G G
A A
我能够为1列做到这一点,但我如何制作两列。我尝试循环以及创建一个函数,然后循环它们但没有一个工作
import re
file_in = open("HapMap.filtered.hmp_test.txt")
result = {}
for line in file_in:
line = line.strip().split()
line2 = line[1]
if re.search("Aspen", line2):
gene = line2
result[gene] = ""
else:
result[gene]+=line2
答案 0 :(得分:2)
尝试:
import re
file_in = open("HapMap.filtered.hmp_test.txt")
columns = 2
result = {}
for line in file_in:
line = line.strip().split()
for column in range(columns):
line2 = line[column]
if re.search("Aspen", line2):
gene = line2
result[gene] = ""
else:
result[gene]+=line2
这会为每列重复您的代码。
答案 1 :(得分:2)
据我了解,您希望将数据框设置为字典,列名为键,该列中的值是否以列表形式显示?
如果是这样,我建议使用pandas模块。
import pandas as pd
df = pd.read_csv('data.csv')#a csv file with data just how you presented it above.
dataDict = pd.DataFrame.to_dict(df, orient='list')#turns the dataframe into a dictionary, with the values presented as a list for each column.
print (dataDict)
这是输出:
{'X2861_AH353KBBXX_8_Aspen_D08_X5': ['G', 'C', 'G', 'C', 'G', 'A'], 'X1KS_AH353KBBXX_8_Aspen_F07_X5': ['G', 'N', 'G', 'M', 'G', 'A']}
答案 2 :(得分:1)
值得一般解决方案的有趣挑战。我将需求解释为值是连接字符串。
#!/usr/bin/env python
import collections as cols
text="""col1 col2 col3
a 1 &
b 2 @
c 3 $
"""
d = cols.OrderedDict()
h = text.splitlines()[0].split(" ") # headers
cH = len(h)
c = 0
for line in text.splitlines():
for item in line.split(" "):
if c >= cH: # lines greater than first, the headers, the dict keys
mod = c % cH
try:
d[h[mod]] = d[h[mod]] + item
except KeyError: # will happen only on first item
d[h[mod]] = item
c += 1
print(d)
结果:
OrderedDict([('col1', 'abc'), ('col2', '123'), ('col3', '&@$')])
订购OrderedDict作为输入。如果您更喜欢常规的无序字典,请使用dict()
模块中的OrderedDict()
构造函数而不是collections
。